Changelog
February 26, 2026 · View on GitHub
5.0.0
Breaking changes
- ESM-only: The entire codebase has been migrated from the
ymmodule system (modules.define/modules.require) to native ES modules (import/export). Theymruntime dependency has been removed. - Vite build system: ENB and all 17+ associated packages have been replaced with Vite. A custom
vite-plugin-bem-levelsplugin handles BEM level scanning,bem:*virtual module resolution, and redefinition chain barrel generation. - jQuery 4.0: The
jquerypeer dependency has been upgraded from^3.xto^4.0.0. Notable API change:$.unique()has been removed — use$.uniqueSort()instead. - Node.js 20+: The minimum supported Node.js version is now 20 (was 8).
- Native Promises:
vowhas been removed. All code now uses nativePromise. - Native test runner: Server-side tests now use
node:testandnode:assertinstead ofmocha/chai. - Playwright: Browser tests now use Playwright instead of
mocha-phantomjs(PhantomJS is dead). - ESLint 10: Linting has been migrated from
jshint/jscsto ESLint 10 with flat config (eslint.config.js). - GitHub Actions CI: Travis CI has been replaced with GitHub Actions.
- Husky + lint-staged:
git-hookshas been replaced withhuskyandlint-staged.
Notable changes
- All
.vanilla.jsand.jssource files have been converted to ES modules withimport/exportsyntax. - Module redefinition chains (e.g.,
jquerywith pointer event extensions) are now handled via auto-generated barrel files byvite-plugin-bem-levels. - The
i18nblock retains its API but uses native ES modules internally. - Browser spec tests (28 spec files, 500+ test cases) run via Vite dev server + Playwright.
- Vite produces platform-specific builds (
desktop,touch) with jQuery as an external dependency.
Removed packages
- Build:
enb,enb-bem-techs,enb-magic-factory,enb-magic-platform,enb-bemxjst,enb-bemxjst-6x,enb-bemxjst-7x,enb-bemxjst-i18n,enb-bh,enb-bh-i18n,enb-borschik,enb-css,enb-js,enb-bem-docs,enb-bem-examples,enb-bem-specs,enb-bem-tmpl-specs,enb-bem-i18n,borschik - Linting:
jscs,jscs-bem,jshint,jshint-groups - Testing:
mocha-phantomjs,istanbul,chai-as-promised - Other:
ym,vow,bower,git-hooks,gitbook-api,bem-naming,bem-walk
Removed config files
.enb/directory (ENB build config).jshintrc,.jscs.json,.jshint-groups.js(linting configs).bowerrc,bower.json(Bower configs).travis.yml(Travis CI config).githooks/directory (git-hooks config)
4.3.1
Bug fixes
- Reverted change that led to error when
lazyInitindeclModwas used (#1594).
4.3.0
Notable changes
jQuerywas updated to 3.2.1 and 1.12.4 (#1587).
Bug fixes
- Possibility to force
lazyinitialization from markup was fixed (#1579). - Possibility to declare entities with mixins was fixed (#1550).
- Now
lazyInitindeclModwill throw an error (#1579). - With bug in
isFunctionmethod offunctionsblock, which works wrong for special functions (#1577).
Other changes
.bemrcconfig was added (#1568).vowwas updated to 0.4.17 (#1565).inheritwas updated to 2.2.6 (#1519).- Private
_delInitedModmethod ofi-bemblock was removed (#1523). - Removed code for old
bem-tools(https://github.com/bem/bem-core/commit/e57678b2d64a3b976a53af4a7fa09bf918685821). - npm dependencies were updated (#1589).
- Now tests are executed also on Node.js 8 (https://github.com/bem/bem-core/commit/dd7e5344a64ad1595eab28febb2242134fcedbb3).
- More specs for
i-bem-domwere added (#1517). gitbookwas added (#1569).- JSDoc was fixed.
- Documentation updates.
4.2.1
Bug fixes
- Fixed an issue with elems cache invalidation on DOM modifications (#1487).
- Fixed an issue in
i-bem-dom__eventswhen event's data was not passed to handler (#1509). - Fixed method
isEditableofdommodule. Missing editable input types were added (#1502).
Other changes
- Fixed syntax error in
i-bem-domJSDoc. - Minor documentation updates.
- CLA introduced.
4.2.0
Notable changes
bem-xjst 8.xsupport was introduced in BEMHTML templates (#1486).
Bug fixes
concat()method was fixed ini-bem-dom__collection(#1488).- An issue in
ua__domwas fix (#1479). - dist:
i-bem-dom__init_autowas removed fromno-autoinitbundle (#1482).
Other changes
- Now
findChildBlock,findChildBlocks,findParentBlock,findParentBlocks,findMixedBlockandfindMixedBlocksmethods throw an error if block is given as String (#1469). buildClassNamefunction was optimized (#1404).- Docs: English translations were added (#1483, #1476, #1475).
- Migration: Added notes about bemTarget (#1491).
- Migration: added info about template options (#1467).
- Fixed issues in docs.
4.1.1
Bug fixes
— Fixed a bug in ua block on touch.blocks level (#1460).
4.1.0
Bug fixes
- Fixed a bug in
identifyreturning different result on each call fordocument(#1441). modules.definerecursion problem was fixed (#1446).- Support for escaping in
uablock was fixed (#1435). - Workaround for
Array.prototype.pushbug inOpera 41was implemented. - An issue with pointer events on iOS devices was fixed (#1253).
- An issue in
i-bem-dom__eventswas fixed. Methodonce()was broken in some cases (#1452).
Other changes
- Ability to specify
html@langattribute was added topageblock (#751).
4.0.0
Breaking changes
- Changes in the
i-bemblock. See MIGRATION.md. - Changes in the
querystring. See MIGRATION.md. - The optional parameter
onlyGetwas removed from theidentifymodule (#1028). - All static methods were removed from the
eventsmodule (#1024). - The
resultfield inEventclass ofeventsmodule was removed (#1023). - The
csselement of thepageblock does not support auto insertion of conditional comments for IE (#379).
3.2.0
Bug fixes
modules.definerecursion problem was fixed (#1446).- Support for escaping in
uablock was fixed (#1435). - Workaround for
Array.prototype.pushbug inOpera 41was implemented.
Other changes
- Ability to specify
html@langattribute was added topageblock (#751).
3.1.0
Bug fixes
- An issue in
getMods()method ofi-bemwas fixed (#1379).
Notable changes
- Templates: support for escaped mode was introduced (#1406).
Other changes
- Minor documentation updates.
3.0.1
Bug fixes
- An issue with pointer events on iOS devices was fixed (#1253).
3.0.0
Breaking changes
- Base templates for
BEMHTMLandBEMTREEwere removed (#1258).bem-xjst6.3.0+ should be used instead. - File extentions of BEMHTML templates were renamed from
*.bemhtmlto*.bemhtml.js(#984). Please check that new extention is supported in you build config. i-bem__i18nelement was removed (#1304). Please usei18nblock for internationalization.jquery__events_type_pointerclickis not using FastClick anymore (#1088).
Notable changes
jQuerywas updated to 2.2.3 and 1.12.3 (#1260).
Bug fixes
- An issue in
pagewas fixed.<meta name=viewport>had wronguser-scalablevalue on the touch level (#1294). - An issue in
jquery__event_type_pointernativewhich led to JS error in IE8 was fixed (1317).
Other changes
- dist: Autoinitialisation of blocks is optional now (#1271).
2.9.0
Notable changes
jQuerywas updated to 2.2.0 and 1.12.0 (#1249).
Bug fixes
- Fixed bug in BEMHTML 1.x which leads to drop of
this.modsinreapply()(#97).
Other changes
jquery__event_type_pointerpressreleasenow exposesoriginalEvent(#1254).- dist: Support for
i18nwas added to dist (#1212). page__css.bemhtmltemplate was updated to support newbem-xjstversions (#1228).
2.8.0
Notable changes
- New i18n block was introduced, providing support for internationalization (#1074).
- Now jQuery is included via
httpsby default (#1202). - Dependency on
bemhtml-compatwas dropped (#1186). Users ofbem-toolsneed to runnpm i bemhtml-compat --saveto install it on their projects.
Bug fixes
- Bug with undefined handler call in
loader_type_jswas fixed (#1159).
Other changes
- BH bundles in
distnow mimic to BEMHTML (#1210). bem createtemplates forbemhtml,bemtree,vanilla.jsandbrowser.jswere improved (#1183).vowwas updated to0.4.10(#1056).
2.7.0
Notable changes
- New
detachmethod was added toi-bem__dom(#1102). i-bem.bemhtmlnow supports nested mixes as objects (873).- Some minor attribute escaping optimizations were added to
i-bem.bemhtml(#961), (#980) and (#982). - Support for bem-xjst 2.x was added to BEMHTML templates (#1021).
clearfixwas optimized to work properly in supported IE browsers (#722).jquerywas updated to 2.1.4 and 1.11.3 (#999).
Bug fixes
- An issue in
i-bem__domwas fixed.findElemdidn't update cache of elements that had been found previously (#583). - An issue in
i-bem__domwas fixed.dropElemCacheworked incorrectly in some edge cases (#1037). - An issue in
i-bem__domwas fixed.setModdidn't add CSS classes if blocks on the same DOM node had overlapping end parts in their names (#1090). - An issue in
pagewas fixed.zoomattribute of the block didn't work for touch levels (#1020). - An issue in
keyboard__codeswas fixed.insertanddeletekeys had wrong key codes (#1002). - An issue in
i-bem.bemhtmlwas fixed.applyNextcalls were skipped in nested templates (b1dc50c). - An issue in
jquery__events_type_pointernativewas fixed to work properly in IE 11/Edge (#1066).
Other changes
- Russian documentation for every blocks was reworked. Please visit https://ru.bem.info/libs/bem-core/ for new documentation.
- Other minor improvements of the documentation.
2.6.0
Notable changes
- Since now
i-bem__domprovides module after DOM is ready (#859). - Since now
setModandhasModmethods ofi-bem__domconvert theirmodValargument to string in case it is not of type string or boolean (#890). - An ability to pass
nonceattribute was added topage, to support related parts of Content Security Policy specification (#882). - New
page__conditional-commenttemplate was added (#551). vowwas updated to 0.4.8 (#837).
Bug fixes
- An issue in
i-bem.bemhtmlwas fixed. Block CSS class repeated in case of mix with the same block (#792). - An issue in
loader_type_bundlewas fixed. Success callback might be applied after timeout error (67ff55f). - An issue in
i-bem__domwas fixed.append,prependand other similar methods won't properly work with strings in some cases (#852). - An issue in
jquery__event_type_winresizewas fixed. MSIE wasn't detected properly (#862). - An issue in
objectwas fixed to proper handlenullvalue astargetargument inextendmethod (#910). - An issue in
pagewas fixed. There was no way to disablex-ua-compatiblemeta tag from BEMJSON (#794).
Other changes
- Timeout in
loader_type_bundlemodule was increased to 30000 ms (4e27422). - Russian documentation for several blocks was fixed.
2.5.1
Bug fixes
- An issue in
jquery__pointerpressandjquery__pointerreleasewas fixed. Events work now in Internet Explorer 8 (#792). - An issue in
jquery__pointernativewas fixed.pointerenterandpointerleaveevents have bubbled up to the document root, while they shouldn't (#801). - An issue in
loader_type_bundlewas fixed. CSS bundle has been always added to the top of the HTML<head>, so CSS rules from the bundle might not work properly (#808). - Issues in BH templates for
uawere fixed. There was no possibility to pass the content of the block from BEMJSON (#734). - An issue in
pagewas fixed. There was a problem with conditional comments for Internet Explorer in the BH template of the block (#781).
Other changes
jquerywas updated to the 2.1.3 and 1.11.2 (#778).- Russian documentation for modules:
clearfix,cookie,identify,idle,inherit,keyboard,loader,next-tick,stringandtickwas added. - Russian documentation for
i-bem.jswas updated. - English guides to BEMHTM and BEMJSON were updated.
2.5.0
Notable changes
- bem-core in now published under the MPL 2.0 license (#443).
- An ability to specify error handler was added to
loader_type_js(#672). BEMContextclass was added tooninitexport context ini-bem.bemtree(#602).reapplystatic method was added to BEMContext class of BEMTREE (#706).- bh templates for block
pagewere added to touch level (#689). - bem-xjst was updated to 0.9.0 (#709).
Bug fixes
- An issue in
i-bem__domwas fixed.findBlocksInsidecould return blocks which weren't inited (#699). - An issue in
tickwas fixed. Timer was not removed byTick#stop()(#694). - An issue in
i-bem.bemhtmlwas fixed.i-bemCSS class was added to elements by mistake (#633). html-from-bemtreetech was fixed to exposevow,console,setTimeoutinside BEMTREE template context (#438ebb8).
Other changes
- English guide to BEMJSON was added.
- Russian documentation for
querystringmodule was added. - Russian documentation for
i-bem.jswas fixed to satisfy current API. - Documentation for BEMHML/BEMTREE for both languages was updated.
2.4.0
Notable changes
- bem-xjst was updated to 0.8.0; bemhtml-compat was updated to 0.0.11.
Bug fixes
- An issue in
jquery__event_type_pointerpressreleasewas fixed.pointerpress/pointerreleaseevents fired for any press/release of mouse button (#607). - An issue in
i-bem__dom.jswas fixed. Baselivemethod was not properly called in some edge cases (#608).
Other changes
- English documentation for JS-syntax of BEMHTML was added.
2.3.0
Notable changes
- New implementation of pointer events was added. Based on pointer events polyfills from Polymer (#567).
- Ability to specify additional data for event was added to
bindTo*methods ofi-bem__dom.js(#568).
Other changes
- An issue in
i-bem.bemhtmlwas fixed. There was an error when mix was used as an object (not an array) in BEMJSON and BEMHTML simultaneously (#555). - An issue in
pagewas fixed. There was no possibility to apply standard modes topagein BEMHTML template and touch template was broken (516).
2.2.4
Bug fixes
- An issue in
i-bem.jswas fixed. Modifier change event has been emitted even ifbeforeSetModhandler had prevented change (#546). - String decoding process of
querystring__urimodule was fixed to return original string if decode failed (#554).
2.2.3
Bug fixes
- Destruction process of blocks was fixed to prevent unexpected block reinitialization (#540).
- An issue in
jquery__event_type_pointerwas fixed. Native mouse events were replaced with pointer events in unexpected cases (#534). unbindFrom*methods ofi-bem__domnow support multiple events to be passed in arguments (#533).- Lost
functionsdependency ineventsmodule was restored (#532).
2.2.2
Bug fixes
- An issue with block reinitialization on the DOM node, that has been processed with destructor, was fixed
in
i-bem__dom(#518). - An issue in mod events subscription was fixed in
i-bem.falsecould be used asmodVal(#529). jquerywas updated to the latest minor releases 2.1.1 and 1.11.1 (#515).
2.2.1
- An issue in
jquery__event_type_pointerpressreleasewas fixed.pointerpressevent has been triggered twice on each mousedown in IE10 (#505).
2.2.0
Notable changes
- New
keyboard__codesmodule has been added (#431). BEMContextclass was added to oninit export context ini-bem.bemhtml(#485).- Ability to declare elements with block class has been added (#481).
- Behaviour of
isSimplemethod ofBEMContextwas fixed ini-bem.bemhtml(#432). - An issue with
liveUnbindFrommethod ofBEMDOMwas fixed ini-bem__dom(#476). - An issue with
isFocusablemethod ofdommodule was fixed for cases wheredomElemis a link withtabindexattribute, but withouthref(#501). - Short way of module declaration was fixed for
i-bem__dom_elem-instances(#479). - A workaround for rendering performance of blocks initialisation in Chrome-based browsers was added
to
i-bem__dom_init_auto(#486). vow.jsmodule has been moved tovow.vanilla.js(#412).
Other changes
vowmodule has been updated to 0.4.3 (#504).- Russian documentation about BEMTREE technology was added (#500).
- Russian documentation for JS-syntax of BEMHTML was updated (#471).
- API references for JS-modules has been added as a separate branch
v2-jsdoc(#478).
2.1.0
Notable changes
- An issue in
i-bem.jswhen modifiers change event had been emitted beforeonSetModhandlers have been called was fixed (#454). - An issue in
i-bem.bemhtmlwas fixed. Since nowthis.modsandthis.ctx.modsuse the same object (#441). - Error in modular declaration of element modifiers was fixed in
i-bem__dom_elem-instances(#447). - inherit module was updated to 2.2.1 (#466).
- An order of tags in
headsection ofpage.bemhtmlwas fixed (#465).
Other changes
baseMixfield description ofi-bem.jswas added to russian docs (#461).- CDN host was changed to
yastatic.net(#444). Previous CDN hostyandex.stis still accessible. Physically they both are the same web servers. DNS records is the only difference. - BEMHTML template for
bem createcommand was added (#277). - We do not support autobuilding of our tests with Node.js 0.8 in Travis CI any longer (#455).
- Travis's build status badge was changed to SVG version :)
2.0.0
Breaking changes
-
All deprecated methods have been removed from
i-bem.jsandi-bem__dom.js(#318). The following methods were removed:destruct, useonSetMod js '';extractParams, useelemParams;trigger, useemit;afterCurrentEvent, usenext-tickmodule;channel, useevents__channelsmodule;changeThis, use nativeFunction.prototype.bind.
-
initanddestructevents have been removed fromi-bem.jsin favor of modifiers changes events (see "Notable changes" section below). -
ecmawas moved to separate repo; ES5-shims should be used for IE < 9 (#230). -
vowmodule has been updated to 0.4.1 (#350). See Vow's changelog for changes. -
Support for vow@0.4 has been added to
i-bem.bemhtml(#385).
Notable changes
- Support for defining BEMDOM-blocks as ym modules has been added (#382).
- Events for modifiers changes have been added to
i-bem.js(#357). - Support for passing string values has been added to
BEMDOM.init(#419). andBEMDOM.updatemethods (#420). - DOM helpers from
i-bem__dom.jsreplace,append,prepend,before,afternow return new context andupdatereturns updated context as a jQuery object (#410). - New
loader_type_bundlehas been added (#358). - Default jQuery versions were updated to 2.1.0 and to 1.11.0, for IE < 9 (#356).
Other changes
i-bem.bemhtmlnow uses strings concatination instead of pushing to buffer in it's internals (#401).- jQuery no longer removes itself from global scope if it exists (#349).
jquery__event_type_pointerclick.jshas been moved from touch level to common (#393).- Modifiers
i-bem_elem-instances_yesandi-bem__dom_elem-instances_yeswere renamed to boolean style (#352). - Runtime error in
pagetemplate in development mode has been fixed (#417). - Usage of
Function.prototype.bindhas been droped fromi-bem.jsinternals in favor of support for Android 2.3 (#404). - Some bugs in
browser-js+bemhtmltech have been fixed (#392). - Up to ym@0.0.15 (#414).
1.2.0
Notable changes
- BEM-blocks are emit
destructevent on destructing (#370). - Improvements of
pointereventspolyfills (#354).
Other changes
- All JSDocs were fixed so bem-jsd could parse them (#335).
- Russian version of BEMHTML reference was actualized to JavaScript syntax (#355).
- Use bower for dependency management (#367).
1.1.0
Notable changes
jquery__configuses jQuery 2.x by default for modern browsers (#319).- Add ability to use any BEMJSON as value of attributes in BEMHTML templates (#290).
- Fix dependencies in
i-bem__collection(#292). - Remove
pageblock touch styles (#306). - Fix
pageBEMHTML wrapping in production mode (#309). - Fix possible JavaScript error in script injection in IE<9 in
next-tick(#324). - Fix
FastClickinitialisation injquery__event_type_pointerclickoftouch.blocks(#332). - Fix
node.jstech bug on Windows systems (#274). - Fix
i-bem__dom_elem-instancesbug withonElemSetMod(#340). - Use bemhtml from bem-xjst (#329).
Other changes
- ym was updated to 0.0.12 (#326).
- Do not flood
consolewith messages ifi-bem__i18nis not in debug mode (#285). - Fix jsdoc for
dropElemCache()method ofi-bem__dommodule (#296). - Development infrastructure was updated to bem-pr@v0.5.x (#323).
- Russian documentation for
i-bem.jswas updated. - List of supported browsers was specified in project README.
1.0.0
Breaking changes
- Starts using modular system ym.
- Removes all deprecated methods from
i-bemandi-bem__dom. i-bemnow has no dependency on jQuery.i-bem__domstill depends on jQuery.- BEMHTML-template can be written with JS-syntax.
- Introduces new tech
bemtree(based on bem-xjst) for describing dynamic generation of BEM-tree. - Introduces new tech
vanilla.jsfor JS-implementations that does not depend on particular JS-engine. - Introduces new techs
browser.jsandnode.jsfor JS-implementations targeted corresponding engines. For backward compatibility we assume that.js-files containsbrowser.jsimplementation. - Introduces polyfill (
jquery__event_type_pointerandjquery__event_type_pointerclickas a jQuery-plugins) for universalize desktop and touch pointer events. - Introduces system for unit testing and blocks examples generation.
- Introduces "simple" modifiers (modifiers without value) support in
i-bemand BEMHTML.
Other changes
- Gets rid of prefixes in all block names (except
i-bem). - Block
i-bem__dombecomes a module (in terms of ym) and allBEM.DOM-block must define additions toi-bem__dom(example). - Method for blocks declaration (
.decl()) does not accept object withnamefield as first parameter. Required form withblockfield:BEM.decl({ block: 'b1', modName: 'm', modVal: 'v' }, ...). - Introduces
nextTickmethod as replacement forafterCurrentEventmethod for ensure of block existence in callback invocation time.BEM.afterCurrentEventis deprecated. - Introduces new
channelsmodule instead ofBEM.channel.BEM.channelis deprecated. changeThisis deprecated. Use nativebindinstead.- Removes
delmethod fromi-bemblock. - Removes
getWindowSizemethod fromi-bem__domblock. UseBEMDOM.win.width()andBEMDOM.win.height(). - Introduces
jquerymodule-wrapper for providing jQuery. If jQuery already included into the page module-wrapper provides it. Otherwise it loads jQuery (version 1.10.1) on its own. $.observablebecomeseventsmodule and not longer depends on jQuery.$.inheritbecomesinheritmodule and not longer depends on jQuery.$.identifybecomesidentifymodule and not longer depends on jQuery.$.throttlesplits into two modules:functions__throttleandfunctions__debounce, they both not longer depend on jQuery.$.decodeURI,$.decodeURIComponentmoves toquerystring__urimodule and not longer depends on jQuery.$.cookiebecomescookiemodule and not longer depends on jQuery.- Introduces
uamodule instead of$.browser(with same interface). - Use
pointerclickinstead ofleftclick. It provides byjquery__event_type_pointerclickpolyfill. i-systemblock splits into two modules:idleandtick.- Triggers for modifiers changes now splitted into two groups:
before setting new value (
beforeSetModandbeforeElemSetMod) and after the value has been set (onSetModandonElemSetMod). Cancellation of modifiers change is possible only frombefore*-triggers. - Using of
{ onSetMod : { js : function() { ... } } }is deprecated, useonSetMod: { js : { inited : ... } } }. destructmethod fromi-bemblock is deprecated. Use supplementary trigger for_jsmodifiers:onSetMod: { js : { inited : ... } } }—{ onSetMod : { js : { '' : ... } } }.exractParamsmethod fromi-bem__domblock is deprecated. UseelemParamsmethod for access to elements params.triggermethod fromi-bemblock is deprecated in flavor ofemitmethod.onFirstmethod fromi-bemblock is deprecated in flavor ofoncemethod.- Deprecated field
e.blockthat provided block-target of BEM-events was removed. Usee.targetfield instead. - Field
e.data.domElemthat provided DOM-element of block in DOM-events was removed. Use$(e.currentTarget)(provided by jQuery). - Introduces parameter for
findElemmethod that allows to search elements of particular block instance (in case of nested blocks with same name). - Introduces possibility to point particular function in
unbindFrom*methods. - Introduces
objectsmodule for work with JS-objects. It contains methods:extend,isEmpty,each. - Introduces
functionsmodule for work with JS-functions. It contains methods:isFunction,noop. - Introduces
dommodule for work with DOM-tree. - Introduces
querystringmodule for work with URL-based strings. - Introduces
loader_type_jsmodule for JS loading. - Introduces
vowmodule for Promises/A+. - Introduces
next-tickmodule as polyfill fornextTick,setImmediate,setTimeout(0, ...and etc. - Introduces
strings__escapemodule for XML, HTML and attributes escaping. inheritmodule now supports mixins.- Introduces
invokeAsapparameter forfunctions__throttlemodule that allows to delay first invocation.