# Documentation - [Introduction](/docs): A typed Lavalink v4 client for modern music bots. - Getting Started - [Setup & Integration](/docs/getting-started/setup-and-integration): Initialize Hoshimi and wire it into your bot's lifecycle. - [Events & Packet Forwarding](/docs/getting-started/events-gateway): Handle Lavalink events and maintain voice state consistency. - [Player Lifecycle](/docs/getting-started/player-lifecycle): Control playback with search, queue, play, pause, skip, seek, and destroy. - Guides - [Searching & Sources](/docs/guides/search-sources): Query tracks from different sources and handle search results. - [Source Registry](/docs/guides/source-registry): Register custom search sources and build identifiers for providers. - [Tracks & Resolution](/docs/guides/tracks-and-resolution): Work with resolved and unresolved tracks, and narrow them with type guards. - [Queue & Persistence](/docs/guides/queue-storage): Manage queues and implement custom storage adapters. - [Autoplay](/docs/guides/autoplay): Keep playing when the queue runs out, with the built-in function or your own. - [Filters](/docs/guides/filters): Apply built-in, plugin and fork filters with a single typed setter. - [Lyrics](/docs/guides/lyrics): Fetch lyrics and subscribe to live line updates. - [Node Management](/docs/guides/node-operations): Select nodes, check health, and perform low-level node operations. - [Plugin Registry](/docs/guides/plugins): Map Lavalink plugins to capabilities and validate what a node can do. - Recipes - [Resume Sessions After a Restart](/docs/recipes/resuming): Survive socket drops, fresh Lavalink sessions, and full process restarts with the right layer. - [Restore the Current Track and Position](/docs/recipes/restore-now-playing): Persist what is playing and resume it from the same spot after a restart. - [Add a "Previous Track" Button](/docs/recipes/previous-track): Play the last track again using the queue history. - [Send a Manual Voice Update](/docs/recipes/manual-voice-update): Push a voice-server payload to Lavalink yourself to force a reconnect or apply a rotation. - [Override a Built-in Structure](/docs/recipes/override-structures): Replace a default class with your own subclass and keep everything strongly typed. - [Type Your Track Requester](/docs/recipes/typed-requester): Give track.requester and track.userData a real shape with module augmentation. - [Type player.data Keys](/docs/recipes/typed-player-data): Give player.data a schema so get/set are checked and autocompleted. - [Recover From Errors and Failures](/docs/recipes/recover-from-failures): Handle typed errors, and react to load failures and stuck tracks.