Releases: xtermjs/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:
And here is the 1024x1024 page after a lot of glyphs have rendered:
Slash and triangle custom glyphs (#4313) via @Tyriar
Eight new powerline extra custom glyphs are supported:
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.openis 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 mvia @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
allowNonHttpProtocolsproperty onILinkHandlerwhich 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
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
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.0xterm-addon-fit@0.7.0xterm-addon-ligatures@0.6.0xterm-addon-search@0.11.0xterm-addon-serialize@0.9.0xterm-addon-unicode11@0.5.0xterm-addon-web-links@0.8.0xterm-addon-webgl@0.14.0
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:
Some work was also done to improve underline rendering overall, characters with long descenders don't overlap with the underline:
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):
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:
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.selectionInactiveBackgroundwill now change the selection color when the terminal is not focused - Support setting extended ansi colors 16-255 (#3905, #3909) via @silamon, @Tyriar
- The
parserandbufferAPIs 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
allowTransparencyfrom its initial value in theTerminalconstructor (#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.disposeis called (#3958) via @Tyriar - Fix mocha test explorer support (#3966) via @silamon
- Add note to the
windowsModeoption 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
-
bellSoundandbellStyleoptions 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 theTerminal.onBellAPI// 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
registerLinkMatcherandderegisterLinkMatcherhave been removed in favor of the link provider API (#3944) via @Tyriar. -
The
allowProposedApioption now defaults tofalse, set this totrueto 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
addMarkerAPI has been removed in favor ofregisterMarker(#3946) via @Tyriar. They are functionally equivalent. -
The deprecated
getOptionandsetOptionAPIs have been removed in favor ofoptions(#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
writeUtf8API has been removed in favor ofwrite(#3947) via @Tyriar.const arr = new Uint8Array(10); // before 5.0.0 term.writeUtf8(arr); // after 5.0.0 term.write(arr);
-
ISelectionPositionhave been removed from the API in favor ofIBufferRange(#3952) via @Tyriar -
colsandrowsoptions 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.selectionhas been renamed toselectionBackgroundfor consistency (#3964) via @Tyriar// before 5.0.0 term.options.theme = { selection: '#000000' }; // after 5.0.0 term.options.theme = { selectionBackground: '#000000' };
-
The
Terminal.optionsgetter now returns aRequired<ITerminalOptions>instead of justITerminalOptionsfor better correctness. Along with this changefastScrollModifiernow accepts'none'instead ofundefined// 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
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:
After:
Other changes
- Release webgl resources when the addon is disposed (#3890) via...
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
minimumContrastRatiooption isn't met when#FFFFFFis 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)andrgba(r, g, b, a)color formats (#3815, #3819, #3823) via @ChaseKnowlden, @Tyriar - Opaque
selectionBackgroundis now supported in the DOM renderer (#3839) via @Tyriar - The symbol powerline font glyphs now use custom rendering when
ITerminalOptions.customGlyphsis enabled (#3856, #3862, #3866) via @Tyriar

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.lineHeightis 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
overviewRulerOptionsproperty to a decoration'sIDecorationOptionsand it will automatically show up in the overview ruler.The width of the resulting overview ruler is controlled byconst marker = term.addMarker(1); const decoration = term.registerDecoration({ marker, x: 5, overviewRulerOptions: { color: '#FF0000', position: 'left' } }); decoration.onRender(() => { decoration.element.style.backgroundColor = 'red'; });
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
selectionForegroundtheme color, when set this will use a static color for selections (#3813) via @Tyriarconst 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
onSelectionChangewhenTerminal.selectis 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/setOptionwithoptions(#3667) via @childrentime - Lint code using putout (#3674) via @coderaiser
- Improve the way the scroll bar is hidden when
scrollbackis0(#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
📥 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
xterm-addon-web-links
- Expose
urlRegexin 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.0xterm-addon-fit@0.5.0xterm-addon-ligatures@0.5.3xterm-addon-search@0.9.0xterm-addon-serialize@0.7.0xterm-addon-unicode11@0.3.0xterm-addon-web-links@0.6.0xterm-addon-webgl@0.12.0
🌐 Website
- Add decorations to the demo (xtermjs/xtermjs.org#170) via @meganrogge
- Fix a typo in hooks guide (xtermjs/xtermjs.org#171) via @fixator10
- Fix handling of
},|and~in the demo (xtermjs/xtermjs.org#175) via @MOBUMIN
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'; });
-
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
🎉 New real-world use cases
- Libv86 Terminal Forwarding (#3664) via @hello-smile6
🤝 Compatible addon versions
xterm-addon-attach@0.6.0xterm-addon-fit@0.5.0xterm-addon-ligatures@0.5.3xterm-addon-search@0.8.2xterm-addon-serialize@0.6.2xterm-addon-unicode11@0.3.0xterm-addon-web-links@0.5.1xterm-addon-webgl@0.11.4
4.17.0
🚀 Features
📦 API
🐞 Bug fixes
- Resolve perf regression from OptionsService.options (#3559) via @silamon
- Prevent exception that could be thrown when reducing the width of the terminal (#3604) via @Tyriar
- Fix text baseline in legacy Edge (#3621) via @felixse
📝 Documentation and internal improvements
- Disable macOS integration tests (#3591) via @Tyriar
- Fix dependents link in README (#3595) via @Tyriar
- Set default VS Code test task (#3603) via @Tyriar
- Add keywords to package.json files (#3620) via @Tyriar
🎉 New real-world use cases
📥 Addons
xterm-addon-ligatures
- Bump font-ligatures to 1.4.1 to fix freeze when loading some fonts (#3598) via @LabhanshAgrawal
xterm-addon-web-links
🤝 Compatible addon versions
xterm-addon-attach@0.6.0xterm-addon-fit@0.5.0xterm-addon-ligatures@0.5.2xterm-addon-search@0.8.2xterm-addon-serialize@0.6.1xterm-addon-unicode11@0.3.0xterm-addon-web-links@0.5.1xterm-addon-webgl@0.11.4
🌐 Website
- Update dependents link (xtermjs/xtermjs.org#167) via @hello-smile6
4.16.0
Make sure you update your xterm.css file if you have your own copy as there were some changes made there (#3579).
🚀 Features
- Add support for OSC 4/10/11/2 which enables programs to set and report colors within the terminal (#3524) via @jerch
📦 API
- Set multiple options through the
Terminal.optionsAPI (#3546, #3586) via @silamon// before term.setOption('rendererType', 'dom'); term.setOption('fontSize', 12); // after term.options = { rendererType: 'dom', fontSize: 12 };
- The link provider API is no longer marked as experimental (#3587) via @Tyriar
🐞 Bug fixes
- Prevent duplicate IME input on Linux (#3535) via @Eugeny
- Clear line wrapped status on EL 2 (erase all in line) (#3536) via @silamon
- Allow shift+wheel to bubble up the DOM (#3551) via @Tyriar
- Fix canvas renderer color changes (#3553) via @jerch
- Prevent character joiners that throw from taking down whole terminal (#3565) via @LabhanshAgrawal
- Add tabIndex to the accessibility tree element to enable screen reader browse mode (#3572) via @Tyriar
- Fix keystroke being ignored on US intl keyboard layouts after entering quotes (#3574) via @Tyriar
- Take terminal padding into account when determining link area (#3580) via @Tyriar
- Don't include trailing EOL when selecting multiple lines that end at the right edge (#3583) via @Tyriar
📝 Documentation and internal improvements
- Fix issues reported by the putout linter (#3538) via @coderaiser
- Fix unexpected error in incremental compiles (#3560) via @silamon
- Mark
IKeyboardEvent.keyCodeas deprecated (#3582) via @Tyriar - Improve debug logging of parsing data to include a character code array (#3588) via @Tyriar
🎉 New real-world use cases
- Tess (update) (#3577) via @SquitchYT
📥 Addons
xterm-addon-search
xterm-addon-web-links
xterm-addon-webgl
- Fix wide character overflow behavior (#3554) via @acid-chicken
🤝 Compatible addon versions
xterm-addon-attach@0.6.0xterm-addon-fit@0.5.0xterm-addon-ligatures@0.5.1xterm-addon-search@0.8.2xterm-addon-serialize@0.6.1xterm-addon-unicode11@...xterm-addon-web-links@0.5.0xterm-addon-webgl@0.11.4
🌐 Website
- Fix a typo (xtermjs/xtermjs.org#166) via @BD103
4.15.0
🚀 Features
- Add support for focus reporting mode (#3506) via @Tyriar
- Improve text alignment by setting text baseline conditionally by browser (#3370) via @dstein64
📦 API
- Add API to clear canvas renderer texture atlas (#3481) via @Tyriar
- Expose typed options via
terminal.options(#3448) via @silamon
🐞 Bug fixes
- Check type of cols & rows before resizing (#3532) via @jeffg2k
- Maintain scrollbar visibility when width changes (#3504) via @yume-chain
- Properly stop default browser scroll action via (#3518) via @jerch
- Support text cursor enable mode in the DOM renderer (#3503) via @jerch
📝 Documentation and internal improvements
- Improve
InputHandlertests (#3523) via @jerch - Improve deserialize documentation (#3512) via @Tyriar
- Add Mocha Test Explorer to devcontainer (#3479) via @silamon
- Update npmignore files (#3476) via @silamon
⚠️ Deprecations
Use term.options over term.setOption/getOption:
// before
term.setOption('rendererType', 'dom');
// after
term.options.rendererType = 'dom';🎉 New real-world use cases
- goormIDE (#3495) via @MyunghoBae
- FleetDeck (#3484) via @JohanKnutzen
📥 Addons
xterm-addon-serialize
- Support strikethrough (#3480) via @silamon
- Enable granularity in what gets serialized (#3473) via @Tyriar
xterm-addon-webgl
- Fix cursor blink for webgl (#3520) via @meganrogge @Tyriar
🤝 Compatible addon versions
xterm-addon-attach@0.6.0xterm-addon-fit@0.5.0xterm-addon-ligatures@0.5.1xterm-addon-search@0.8.1xterm-addon-serialize@0.6.1xterm-addon-unicode11@0.3.0xterm-addon-web-links@0.4.0xterm-addon-webgl@0.11.3
🌐 Website
Pull from https://github.com/xtermjs/xtermjs.org/pulls?q=is%3Apr+sort%3Aupdated-desc+is%3Aclosed
4.14.1
4.14.0
🚀 Features
- Pixel perfect box drawing and block characters (#3416, #3428) via @meganrogge, @Tyriar


xterm-headlessis a new package available on npm that allows xterm to run in a headless mode within node.js (#3212, #3214, #3413, #3414, #3420, #3421) via @Tyriar, @joyceerhl- New strikethrough style support and underline support in the WebGL renderer (#3343, #3384, #3386, #3387) via @silamon, @Tyriar

- The scroll bar is now hidden when the scrollback option is set to 0 (#3398) via @Puneethnaik
📦 API
- The new readonly
modesAPI exposes the terminal's internal modes (#3418) via @Tyriar. These are used for example in the xterm-addon-serialize to enable mode serialization.if (terminal.modes.applicationCursorKeysMode) { // DECCKM is enabled (CSI ? 1 h) }
🐞 Bug fixes
- Fix issue where scrollbar would be visible after clearing the scrollback with an escape sequence (#3372) via @Puneethnaik
- Fix cursor ghosting in canvas and webgl renderer when device pixel ratio is not 1 (#3392, #3393) via @Tyriar
- Fixed the cursor blink component not being property disposed of (#3403) via @Eugeny
- Remove role=document from terminal element (#3419) via @Tyriar
- Ensure underscore glyphs remain within the cell bounds (#3426) via @Tyriar
- Handle input from macOS and Windows emoji IMEs (#3429) via @Eugeny
- Properly handle dead keys and altgr (#3430, #3432, #3437) via @Eugeny
- Fix parser throughput regressions which should improve throughput approximately 2-3x (#3452) via @Tyriar
- Don't break the terminal when undefined is passed into the Terminal ctor explicitly (#3453) via @silamon
📝 Documentation and internal improvements
- The screen reader mode now gets updated at most once per second to avoid layout thrashing (#3399) via @pattch
- Fix some eslint errors in test code (#3415) via @Tyriar
- Improve demo usability by moving options into a side panel (#3439, #3447) via @simran916
- Use a common function to launch the test playwright browser (#3444) via @daiyam
- Allow running specific tests and support VS Code's mocha test explorer extension (#3445) via @daiyam
- Add a simple load test to the demo (#3451) via @Tyriar
- Reduce playwright test flakiness (#3458) via @Tyriar
- Switch the active unicode version in the demo when the unicode11 addon is activated/deactivated (#3462) via @anirudh1713
🎉 New real-world use cases
- HashiCorp Nomad (#3407) via @DingoEatingFuzz
- TermPair and gdbgui (#3409) via @cs01
📥 Addons
xterm-addon-ligatures
- Fix
navigatortyping issues (#3371) via @LabhanshAgrawal
xterm-addon-search
xterm-addon-serialize
- Support for node via xterm-headless (#3421) via @Tyriar
- Serializing terminal modes is now supported (#3418) via @Tyriar
- Add missing repository key to package.json (#3431) via @Tyriar
xterm-addon-unicode11
xterm-addon-webgl
- Fix an exception when disposing of the webgl addon (#3454) via @meganrogge
🤝 Compatible addon versions
xterm-addon-attach@0.6.0xterm-addon-fit@0.5.0xterm-addon-ligatures@0.5.1xterm-addon-search@0.8.1xterm-addon-serialize@0.6.0xterm-addon-unicode11@0.3.0xterm-addon-web-links@0.4.0xterm-addon-webgl@0.11.2
🌐 Website
- Improve run on Linux instructions (xtermjs/xtermjs.org#152) via @Tyriar
- The website now has a new demo on the home page which shows off more of xterm.js' functionality (xtermjs/xtermjs.org#153, xtermjs/xtermjs.org#155, xtermjs/xtermjs.org#156, xtermjs/xtermjs.org#158) via @Tyriar

4.13.0
🐞 Bug fixes
- Improve EOL handling (#2979, #3362) via @jerch
- Select all characters of a wrapped link (#3363) via @meganrogge
- Use IEvent from xterm (#3334) via @UziTech
📝 Documentation and internal improvements
- Remove Shellvault from README (#3366) via @angerson
- Upgrade to node v14 (#3344) via @silamon
- Improve linting (#2953) via @coderaiser
- Update local fonts query (#3337) via @LabhanshAgrawal
🎉 New real-world use cases
- Command line for everyone (#3345) via @tsadarsh
- Tess (#3352) via @SquitchYT
🤝 Compatible addon versions
xterm-addon-attach@0.6.0xterm-addon-fit@0.5.0xterm-addon-ligatures@0.5.1xterm-addon-search@0.8.0xterm-addon-serialize@0.5.0xterm-addon-unicode11@0.2.0xterm-addon-web-links@0.4.0xterm-addon-webgl@0.11.1









