tabbable is a small JavaScript utility that finds all tabbable DOM nodes (elements in the tab order) within a given containing node. It also provides helpers like isTabbable, focusable, isFocusable, and getTabIndex, which are useful for building and testing accessible keyboard focus behavior.
Project status
- The repository appears actively maintained, with a recent upstream push on 2026-06-04, and multiple tagged version updates after the 2023 baseline.
- Update cadence looks like it picked up recently, with updates in 2025 (v6.3.0 on 2025-10-22, v6.4.0 on 2025-12-31), following a long gap since v6.2.0 on 2023-06-26.
AI summary generated Today
Recent updates
v6.4.0
5 months agov6.4.0 reintroduces a selector-based fast path for detecting whether elements are inside an inert subtree, using the `[inert] *` selector. The code changes expand the internal candidate selector list to exclude both inert elements and elements within inert descendants, and adjust inert detection logic accordingly.
Featuresv6.3.0
7 months agov6.3.0 primarily introduces a new displayCheck mode, `full-native`, intended to use the browser's native Element#checkVisibility behavior. The code changes also include substantial development tooling and CI configuration updates, plus expanded test coverage around the new visibility behavior.
Featuresv6.2.0
6/26/2023v6.2.0 adds a new public getTabIndex(node) API intended to let external consumers (such as focus-trap) compute tab indexes consistently with tabbable(). The release notes only mention the new API, but the code also refactors internal tab index calculation and sorting behavior to support this functionality.
Featuresv6.1.2
5/3/2023Release v6.1.2 is described as a patch change that pins jsdom downstream dependency nwsapi to v2.2.2. The actual diff includes that pin, but it also contains a broad, undocumented tooling migration from Yarn to NPM plus many development dependency bumps and CI/script changes.
Breakingv6.1.1
2/15/2023v6.1.1 is a patch release intended to fix focus-trap/tabbable behavior in environments like JSDom that do not support the HTMLElement.inert and HTMLElement.contentEditable related APIs, and that fail on the selector ':not([inert *])'. The code changes replace the problematic selector strategy with attribute-based detection and additional inert lookups in JavaScript.
v6.1.0
2/15/2023v6.1.0 adds support for the HTML inert attribute so that inert elements, and inert descendants, are excluded from tabbable and focusable results. It also fixes a crash in the isHidden() -> isNodeAttached() -> getRootNode() path for a specific corner case where a node’s root node can be itself. The code changes include more than just inert filtering, including new inert-detection logic and additional defensive handling around getRootNode().
Featuresv6.0.1
10/28/2022v6.0.1 is a patch release that addresses a crash occurring when `tabbable` processes table header cells that use the native `scope` attribute. The diff shows this is addressed by changing the internal “scoped candidates” bookkeeping so it no longer collides with `<th scope=...>` DOM properties, and it adds an end-to-end fixture test to prevent regression.
v6.0.0
8/17/2022v6.0.0 is a major release that drops Internet Explorer support and changes how the library determines visibility when elements are detached from the main document. Specifically, the default displayCheck mode ('full') now treats detached nodes as hidden, and a new 'legacy-full' option is added to preserve the older (incorrect) behavior.
BreakingFeaturesv5.3.3
5/25/2022v5.3.3 is a patch release with a behavioral fix for tab order computation when a custom element host has a negative tabindex and exposes a shadow root. It updates the shadow DOM candidate collection logic and adds an end-to-end test fixture to cover the untabbable shadow host case.
v5.3.2
5/6/2022v5.3.2 fixes a corner case where `displayCheck=full` (the default) could cause tabbable and focusable checks to hide all nodes when the provided container or node is not attached to the main `document`. The release also updates `displayCheck` documentation to warn about this behavior for `full` and `non-zero-area` modes. CI and dev/test tooling were also updated as part of this patch.