# keyrove > Keyboard navigation for lists, grids and trees. Configure it with data attributes or JavaScript options, in any framework.
npm i @mixedrays/keyrove
↑ ↓ move, Home and End jump. Tab still visits each folder.
01 / Your stack
## Use it in your framework The same items, the same handler. `keyRove` accepts native keyboard events and compatible framework events, including React's synthetic events. There is no adapter or wrapper component to install. Start with ordinary attributes. When you want type-checked settings, [attribute builders](/docs/api#attribute-builders) fit the same templates. [Framework setup](/docs/installation)02 / Your settings
## Add only the behavior you need Keep the handler. Change a setting in the markup. **Looping** wraps from the last item to the first. **Horizontal** changes the default arrows. **One tab stop** lets Tab enter and leave the group while the arrows move within it. Each example adds just one behavior to the list you already know.03 / Your markup
## Configure it where it fits Write attributes when you own the markup. Use an item selector when the HTML comes from a component library or CMS. These two setups navigate identically. You can mix both: `keyRove(e, { loop: true })` overrides looping while still reading the items and other settings from their attributes. [Attributes and options](/docs/attributes-and-options)04 / Your layout
## Move through a grid Give the group a column count and the same handler moves across cells and between rows. Your CSS still controls the layout. For a responsive CSS grid, set `data-keyrove-cols="auto"`. keyrove reads the current tracks on each keypress, so resizing needs no navigation instance to update. [Grid navigation](/docs/examples/grid)05 / Your interaction
## Combine behaviors Now put the pieces together: a menu configured with an item selector, looping, and one tab stop. Add `createTypeahead` when people should also be able to find an item by its label. Both handlers share the same group settings; `||` passes a key to typeahead only when navigation leaves it unhandled. [JavaScript options](/docs/examples/javascript-options) · [Typeahead](/docs/examples/typeahead)Type E to focus Email a copy. Arrows skip the disabled item and wrap at the ends.
06 / Your application
## Build more involved interfaces Give an item a shortcut. Nest groups with their own keys. Or combine focus navigation with your application's behavior. The tree is the fullest example: keyrove navigates visible rows and typeahead finds them by name. Your code opens and closes folders, sets ARIA states, and decides what activating a file does. Start with the part you need; the same handler stays underneath.npm i @mixedrays/keyrove