Newsletter
Join the Community
Subscribe to our newsletter for the latest news and updates
Set of components for sites development
bem-components is an open-source library of ready-made visual components (called blocks) for creating web interfaces, developed by Yandex and released under the Mozilla Public License 2.0.
bem-components (styled as bem-components on npm) is a set of reusable UI blocks — attach, button, checkbox, dropdown, icon, input, link, menu, modal, popup, progressbar, radio, select, spin, textarea, and others — that implement the BEM methodology. The library takes BEM-oriented markup and JavaScript and produces compiled CSS and JS via a Vite build, outputting three platform bundles: dist/desktop/, dist/touch-pad/, and dist/touch-phone/. It was created by Yandex and is maintained on GitHub under the bem/bem-components repository.
islands theme implements the new Yandex design; the library supports several themes at once and allows creating new themes.common.blocks, desktop.blocks, touch.blocks, touch-phone.blocks, touch-pad.blocks, plus design levels, so the same component adapts to device types.change for value fields) that you can listen to.focused modifier is applied on mouse click, while focused-hard is set for keyboard or JavaScript focus and adds a stronger visual highlight, such as an extra border in the islands theme.islands theme provides the Yandex visual language out of the box.islands to rebrand all blocks consistently.Install with npm install bem-components (requires Node.js >= 20 and peer dependencies bem-core ^5.0.0 and jquery ^4.0.0). Add the library to your project, import the needed blocks, and build with Vite. Blocks change state through modifiers; you listen to modifier-change events instead of creating custom BEM events.
Yes. The code is open-source and released under the Mozilla Public License 2.0; documentation is © 2012 YANDEX LLC.
bem-components requires bem-core ^5.0.0 and jquery ^4.0.0. You also need Node.js >= 20.
Yes. It has separate levels for touch, touch-phone, and touch-pad, and the build outputs a dist/touch-phone/ and dist/touch-pad/ bundle. Supported versions: Android 5+ and iOS 12+.
The repository uses Vite as the build tool and dev server, PostCSS with Autoprefixer, ESLint for code analysis, and Playwright for browser regression tests.
The source is on GitHub at bem/bem-components. Current tasks are tracked via GitHub Issues, and tests run automatically on GitHub Actions for each pull request.
