> ## Documentation Index
> Fetch the complete documentation index at: https://salad-ffed6391.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Get started with Salada - the powerful Discord Lavalink wrapper for Python

## Get started with Salada in three steps

Set up Salada and start building music bots with enhanced Lavalink functionality.

### Step 1: Installation and Setup

<AccordionGroup>
  <Accordion icon="download" title="Install Salada">
    Install Salada in your Python project using pip:

    ```bash theme={null}
    pip install salada
    ```
  </Accordion>

  <Accordion icon="server" title="Set up Lavalink server">
    Before using Salada, you need a running Lavalink server:

    1. Download the latest Lavalink.jar from [GitHub releases](https://github.com/lavalink-devs/Lavalink/releases)
    2. Create an `application.yml` configuration file
    3. Start your Lavalink server: `java -jar Lavalink.jar`

    <Tip>Make sure your Lavalink server is running before initializing Salada!</Tip>
  </Accordion>
</AccordionGroup>

### Step 2: Initialize Salada

<AccordionGroup>
  <Accordion icon="code" title="Quick setup">
    Create your first Salada instance and connect to your Lavalink server:

    ```python theme={null}
    import discord
    from discord.ext import commands
    from salada import Salad

    INTENTS = discord.Intents.default()
    INTENTS.message_content = True
    INTENTS.voice_states = True

    NODES = [{
        'host': '127.0.0.1',
        'port': 2333,
        'auth': 'youshallnotpass',
        'ssl': False
    }]

    class MusicBot(commands.Bot):
        def __init__(self):
            super().__init__(command_prefix='!', intents=INTENTS)
            self.salad = None
        
        async def setup_hook(self):
            self.salad = Salad(self, NODES)
            await self.salad.start(NODES, str(self.user.id))
            await self.tree.sync()

    bot = MusicBot()

    bot.run('YOUR_BOT_TOKEN')
    ```
  </Accordion>

  <Accordion icon="cog" title="Complete configuration">
    For production use, here's a full configuration with all available options:

    ```python theme={null}
    from salada import Salad

    NODES = [{
        'host': 'localhost',
        'port': 2333,
        'auth': 'youshallnotpass',
        'ssl': False,
        'name': 'main-node'
    }]

    self.salad = Salad(self.bot, NODES opts={
        'enableReconnect': True,
        'infiniteReconnect': True,
        'maxReconnectAttempts': 10,
        'baseReconnectDelay': 2.0,
        'maxReconnectDelay': 300.0
    })
    ```

    <Tip>The failover options provides error handling and automatic reconnection!</Tip>
  </Accordion>
</AccordionGroup>

### Step 3: Play your first track

<Accordion icon="play" title="Create a player and play music">
  Here's how to create a connection and play your first track:

  ```python theme={null}
  from discord import app_commands

  @bot.tree.command(name='play')
  @app_commands.describe(query='Song name or URL')
  async def play(interaction: discord.Interaction, query: str):
      await interaction.response.defer()
      
      if not interaction.user.voice:
          await interaction.followup.send('❌ Join a voice channel first!')
          return
      
      player = bot.salad.players.get(interaction.guild.id)
      if not player:
          player = await bot.salad.createConnection({
              'guildId': interaction.guild.id,
              'voiceChannel': interaction.user.voice.channel.id,
              'textChannel': interaction.channel.id
          })
          await interaction.user.voice.channel.connect()
      
      result = await bot.salad.resolve(query, requester=interaction.user)
      tracks = result.get('tracks', [])
      
      if not tracks:
          await interaction.followup.send('❌ No tracks found!')
          return
      
      track = tracks[0]
      player.addToQueue(track)
      
      if not player.playing:
          await player.play()
          await interaction.followup.send(f'▶️ Now playing: **{track.title}**')
      else:
          await interaction.followup.send(f'➕ Added: **{track.title}**')
  ```
</Accordion>

## Next steps

Explore Salada's powerful features for Discord music bots:

<CardGroup cols={2}>
  <Card title="Player Management" icon="play" href="/guides/player">
    Learn how to create, manage, and control music players.
  </Card>

  <Card title="Queue System" icon="list" href="/guides/queue">
    Implement playlists and queue management for your bot.
  </Card>

  <Card title="Audio Filters" icon="sliders" href="/guides/filters">
    Add effects like bass boost, nightcore, and more to audio.
  </Card>

  <Card title="Events & Listeners" icon="bell" href="/guides/events">
    Handle player events and create responsive music experiences.
  </Card>
</CardGroup>

## Key Features

Salada provides enhanced functionality over standard Lavalink clients:

* **Easy-to-use API** with intuitive methods and properties
* **Built-in queue management** with shuffle, loop, and skip functionality
* **Advanced search** supporting YouTube, Spotify, SoundCloud, and more
* **Audio filters** for dynamic sound modification
* **Event-driven architecture** for responsive bot behavior
* **Python 3.8+ support** with async/await

<Note>
  **Need help?** Check out our [API Reference](https://github.com/ToddyTheNoobDud/Salad/blob/main/examples/music.py) or join our community Discord server for support and examples.
</Note>
