Skip to main content

Music Assistant frontend (Vue PWA)

The Music Assistant frontend/panel is developed in Vue, development instructions below.

Recommended IDE Setup

VSCode + Volar (and disable Vetur) + TypeScript Vue Plugin (Volar).

Type Support for .vue Imports in TS

TypeScript cannot handle type information for .vue imports by default, so we replace the tsc CLI with vue-tsc for type checking. In editors, we need TypeScript Vue Plugin (Volar) to make the TypeScript language service aware of .vue types.

If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a Take Over Mode that is more performant. You can enable it by the following steps:

  1. Disable the built-in TypeScript Extension
    1. Run Extensions: Show Built-in Extensions from VSCode's command palette
    2. Find TypeScript and JavaScript Language Features, right click and select Disable (Workspace)
  2. Reload the VSCode window by running Developer: Reload Window from the command palette.

Customize configuration

See Vite Configuration Reference.

Project Setup

nvm use node
pnpm install

Compile and Hot-Reload for Development

pnpm dev

This will launch an auto-reload development environment (usually at http://localhost:3000) Open the url in the browser and a popup will ask the location of the MA server. You can either connect to a locally launched dev server or an existing running server on port 8095.

Type-Check, Compile and Minify for Production

pnpm build

Lint with ESLint

pnpm lint

UI Framework

This project is migrating from Vuetify to shadcn-vue as its primary UI component library.

Development Guidelines

Components

  • Size limit: Keep components under 300–400 lines. If a component grows beyond this, split it into smaller, focused sub-components.
  • Single responsibility: Each component should do one thing well. Extract repeated logic or UI patterns into reusable components.
  • Composition over complexity: Prefer composing small components rather than building monolithic ones with many responsibilities.

UI Components

  • Use shadcn-vue: All new UI should use shadcn-vue components located in src/components/ui/. Do not introduce new Vuetify components.
  • Extend, don't override: If a shadcn-vue component needs customization, extend it via props or slots rather than overriding styles globally.
  • Avoid inline styles: Use Tailwind utility classes for styling. Avoid style="" attributes except for dynamic values that cannot be expressed as classes.

TypeScript

  • Always type props and emits: Define explicit types for all component props and emits — avoid any.
  • Prefer interface for object shapes: Use interface for defining data shapes and type for unions/intersections.
  • No implicit any: Every function parameter and return value should be typed or clearly inferrable.

State & Composables

  • Extract reusable logic into composables: Any stateful logic shared between two or more components belongs in a composable under src/composables/.
  • Keep <script setup> lean: Heavy logic (data fetching, transformations) should live in composables, not inline in the component.

Helpers & Utilities

  • Pure functions go in src/helpers/: Any standalone utility function (e.g. string manipulation, date formatting, data transformation) must be placed in src/helpers/ rather than inlined in a component or composable.
  • One file per concern: Group related helpers in a named file (e.g. src/helpers/string.ts, src/helpers/date.ts). Avoid a single catch-all utils.ts.
  • Test every helper: Each helper file must be covered by unit tests. For new helpers, add a corresponding test file colocated with the helper (e.g. src/helpers/string.test.ts). Existing tests under tests/helpers/ may remain, but new tests should follow the colocated pattern. Helpers with no test coverage should not be merged.

API Calls & User Feedback

  • Always show feedback on API calls: Every API call must be wrapped with user feedback:
    • On success: call toast.success(...) with a clear confirmation message.
    • On failure: call toast.error(...) with a meaningful error message — never silently swallow errors.
  • Example pattern:
    try {
      await api.doSomething()
      toast.success("Action completed successfully")
    } catch (e) {
      toast.error("Failed to complete action")
    }
    
  • Do not use console.error as a substitute for user-facing feedback on API errors (or for meaningful calls).

General Best Practices

  • No magic numbers/strings: Extract constants with descriptive names.
  • Meaningful naming: Variables, functions, and components should clearly describe their purpose. Avoid abbreviations unless universally understood.
  • Keep templates readable: If a template expression is complex, move it to a computed property.
  • Clean up side effects: Always clean up event listeners and intervals in onUnmounted; manually created watchers outside component setup or manual effect scopes must also be cleaned up.
  • Accessibility: Use semantic HTML elements and provide aria-* attributes where appropriate.

Translation Management

We use Lokalise to manage the translation files for the Music Assistant frontend

Lokalise logo

Contributing

If you wish to assist in translating Music Assistant into a language that it currently does not support, please see here https://music-assistant.io/help/lokalise/.


A project from the Open Home Foundation

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

music_assistant_frontend-2.17.228.tar.gz (6.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

music_assistant_frontend-2.17.228-py3-none-any.whl (6.8 MB view details)

Uploaded Python 3

File details

Details for the file music_assistant_frontend-2.17.228.tar.gz.

File metadata

File hashes

Hashes for music_assistant_frontend-2.17.228.tar.gz
Algorithm Hash digest
SHA256 a3d4907e3626ba5ea30ea03f5ee6060ced3c2ece0f8f5c58f91fd422beae3de6
MD5 510ba0b1a3f4552d41dca5c2d9238151
BLAKE2b-256 ebb50a3829e4efcc16d3f2ee1e969d40023954e9e69c315aacd9dec3b9904626

See more details on using hashes here.

File details

Details for the file music_assistant_frontend-2.17.228-py3-none-any.whl.

File metadata

File hashes

Hashes for music_assistant_frontend-2.17.228-py3-none-any.whl
Algorithm Hash digest
SHA256 ad78b488b76b6ada2063f5793d236522ccd0aaf7f6dca006a8ec799de2aecfa2
MD5 83fd51a81d8e02badb7fab1aadd26d40
BLAKE2b-256 4594d36d67d0af18198dc53aa10c06882b7970ff25dc5b2b17cc07b2cfe477f5

See more details on using hashes here.

Release history Release notifications | RSS feed

2.17.303

2 files

2.17.302

2 files

2.17.301

2 files

2.17.300

2 files

2.17.299

2 files

2.17.298

2 files

2.17.297

2 files

2.17.296

2 files

2.17.295

2 files

2.17.294

2 files

2.17.293

2 files

2.17.292

2 files

2.17.291

2 files

2.17.290

2 files

2.17.289

2 files

2.17.288

2 files

2.17.287

2 files

2.17.286

2 files

2.17.285

2 files

2.17.284

2 files

2.17.283

2 files

2.17.282

2 files

2.17.281

2 files

2.17.280

2 files

2.17.279

2 files

2.17.278

2 files

2.17.277

2 files

2.17.276

2 files

2.17.275

2 files

2.17.274

2 files

2.17.273

2 files

2.17.272

2 files

2.17.271

2 files

2.17.270

2 files

2.17.269

2 files

2.17.268

2 files

2.17.267

2 files

2.17.266

2 files

2.17.265

2 files

2.17.264

2 files

2.17.263

2 files

2.17.262

2 files

2.17.261

2 files

2.17.260

2 files

2.17.259

2 files

2.17.258

2 files

2.17.257

2 files

2.17.256

2 files

2.17.255

2 files

2.17.254

2 files

2.17.253

2 files

2.17.252

2 files

2.17.251

2 files

2.17.250

2 files

2.17.249

2 files

2.17.248

2 files

2.17.247

2 files

2.17.246

2 files

2.17.245

2 files

2.17.244

2 files

2.17.243

2 files

2.17.242

2 files

2.17.241

2 files

2.17.240

2 files

2.17.239

2 files

2.17.238

2 files

2.17.237

2 files

2.17.236

2 files

2.17.235

2 files

2.17.234

2 files

2.17.233

2 files

2.17.232

2 files

2.17.231

2 files

2.17.230

2 files

2.17.229

2 files

This release

2.17.228 This release

2 files

2.17.227

2 files

2.17.226

2 files

2.17.225

2 files

2.17.224

2 files

2.17.223

2 files

2.17.222

2 files

2.17.220

2 files

2.17.219

2 files

2.17.218

2 files

2.17.217

2 files

2.17.216

2 files

2.17.215

2 files

2.17.214

2 files

2.17.213

2 files

2.17.212

2 files

2.17.211

2 files

2.17.210

2 files

2.17.209

2 files

2.17.208

2 files

2.17.207

2 files

2.17.206

2 files

2.17.205

2 files

2.17.204

2 files

2.17.203

2 files

2.17.202

2 files

2.17.201

2 files

2.17.200

2 files

2.17.199

2 files

2.17.198

2 files

2.17.197

2 files

2.17.196

2 files

2.17.195

2 files

2.17.194

2 files

2.17.193

2 files

2.17.192

2 files

2.17.191

2 files

2.17.190

2 files

2.17.189

2 files

2.17.188

2 files

2.17.187

2 files

2.17.186.post3

2 files

2.17.186.post2

2 files

2.17.186.post1

2 files

2.17.186

2 files

2.17.185

2 files

2.17.184

2 files

2.17.183

2 files

2.17.182

2 files

2.17.181

2 files

2.17.180

2 files

2.17.179

2 files

2.17.178

2 files

2.17.177

2 files

2.17.176

2 files

2.17.175

2 files

2.17.174

2 files

2.17.173

2 files

2.17.172

2 files

2.17.171

2 files

2.17.170

2 files

2.17.169

2 files

2.17.168

2 files

2.17.167

2 files

2.17.166

2 files

2.17.165

2 files

2.17.164

2 files

2.17.163

2 files

2.17.162

2 files

2.17.161

2 files

2.17.160

2 files

2.17.159

2 files

2.17.158

2 files

2.17.157

2 files

2.17.156

2 files

2.17.155

2 files

2.17.154

2 files

2.17.153

2 files

2.17.152

2 files

2.17.151

2 files

2.17.150

2 files

2.17.149

2 files

2.17.148

2 files

2.17.147

2 files

2.17.146

2 files

2.17.145

2 files

2.17.144

2 files

2.17.143

2 files

2.17.142

2 files

2.17.141

2 files

2.17.140

2 files

2.17.139

2 files

2.17.138

2 files

2.17.137

2 files

2.17.136

2 files

2.17.135

2 files

2.17.134

2 files

2.17.133

2 files

2.17.132

2 files

2.17.131

2 files

2.17.130

2 files

2.17.129

2 files

2.17.128

2 files

2.17.127

2 files

2.17.126

2 files

2.17.125

2 files

2.17.124

2 files

2.17.123

2 files

2.17.122

2 files

2.17.121

2 files

2.17.120

2 files

2.17.119

2 files

2.17.118

2 files

2.17.117

2 files

2.17.116

2 files

2.17.115

2 files

2.17.114

2 files

2.17.113

2 files

2.17.112

2 files

2.17.111

2 files

2.17.110

2 files

2.17.109

2 files

2.17.108

2 files

2.17.107

2 files

2.17.106

2 files

2.17.105

2 files

2.17.104

2 files

2.17.103

2 files

2.17.102

2 files

2.17.101

2 files

2.17.100

2 files

2.17.99

2 files

2.17.98

2 files

2.17.97

2 files

2.17.96

2 files

2.17.95

2 files

2.17.94

2 files

2.17.93

2 files

2.17.92

2 files

2.17.91

2 files

2.17.90

2 files

2.17.89

2 files

2.17.88

2 files

2.17.87

2 files

2.17.86

2 files

2.17.85

2 files

2.17.84

2 files

2.17.83

2 files

2.17.82

2 files

2.17.81

2 files

2.17.80

2 files

2.17.79

2 files

2.17.78

2 files

2.17.77

2 files

2.17.76

2 files

2.17.75

2 files

2.17.74

2 files

2.17.73

2 files

2.17.72

2 files

2.17.71

2 files

2.17.70

2 files

2.17.69

2 files

2.17.68

2 files

2.17.67

2 files

2.17.66

2 files

2.17.65

2 files

2.17.64

2 files

2.17.63

2 files

2.17.62

2 files

2.17.61

2 files

2.17.60

2 files

2.17.59

2 files

2.17.58

2 files

2.17.57

2 files

2.17.56

2 files

2.17.55

2 files

2.17.54

2 files

2.17.53

2 files

2.17.52

2 files

2.17.51

2 files

2.17.50

2 files

2.17.48

2 files

2.17.47

2 files

2.17.46

2 files

2.17.45

2 files

2.17.44

2 files

2.17.43

2 files

2.17.42

2 files

2.17.41

2 files

2.17.40

2 files

2.17.39

2 files

2.17.38

2 files

2.17.37

2 files

2.17.36

2 files

2.17.35

2 files

2.17.34

2 files

2.17.33

2 files

2.17.32

2 files

2.17.31

2 files

2.17.30

2 files

2.17.29

2 files

2.17.28

2 files

2.17.27

2 files

2.17.26

2 files

2.17.25

2 files

2.17.24

2 files

2.17.23

2 files

2.17.22

2 files

2.17.21

2 files

2.17.20

2 files

2.17.19

2 files

2.17.18

2 files

2.17.17

2 files

2.17.16

2 files

2.17.15

2 files

2.17.14

2 files

2.17.13

2 files

2.17.12

2 files

2.17.11

2 files

2.17.10

2 files

2.17.9

2 files

2.17.8

2 files

2.17.7

2 files

2.17.6

2 files

2.17.5

2 files

2.17.4

2 files

2.17.3

2 files

2.17.2

2 files

2.17.1

2 files

2.17.0

2 files

2.16.8

2 files

2.16.7

2 files

2.16.6

2 files

2.16.5

2 files

2.16.4

2 files

2.16.3

2 files

2.16.2

2 files

2.16.1

2 files

2.16.0

2 files

2.15.4

2 files

2.15.3

2 files

2.15.2

2 files

2.15.1

2 files

2.15.0

2 files

2.14.9

2 files

2.14.8

2 files

2.14.7

2 files

2.14.6

2 files

2.14.5

2 files

2.14.4

2 files

2.14.3

2 files

2.14.2

2 files

2.14.0

2 files

2.13.3

2 files

2.13.1

2 files

2.13.0

2 files

2.12.2

2 files

2.12.1

2 files

2.12.0

2 files

2.11.11

2 files

2.11.10

2 files

2.11.8

2 files

2.11.7

2 files

2.11.6

2 files

2.11.5

2 files

2.11.4

2 files

2.11.3

2 files

2.11.2

2 files

2.11.1

2 files

2.11.0

2 files

2.10.11

2 files

2.10.10

2 files

2.10.9

2 files

2.10.8

2 files

2.10.7

2 files

2.10.6

2 files

2.10.5

2 files

2.10.4

2 files

2.10.3

2 files

2.10.2

2 files

2.10.1

2 files

2.10.0

2 files

2.9.17

2 files

2.9.16

2 files

2.9.15

2 files

2.9.14

2 files

2.9.13

2 files

2.9.12

2 files

2.9.11

2 files

2.9.10

2 files

2.9.9

2 files

2.9.6

2 files

2.9.5

2 files

2.9.4

2 files

2.9.3

2 files

2.9.2

2 files

2.9.1

2 files

2.9.0

2 files

2.8.13

2 files

2.8.12

2 files

2.8.11

2 files

2.8.10

2 files

2.8.9

2 files

2.8.8

2 files

2.8.7

2 files

2.8.6

2 files

2.8.5

2 files

2.8.4

2 files

2.8.3

2 files

2.8.2

2 files

2.8.1

2 files

2.8.0

2 files

2.7.0

2 files

2.6.4

2 files

2.6.3

2 files

2.6.1

2 files

2.6.0

2 files

2.5.15

2 files

2.5.14

2 files

2.5.13

2 files

2.5.12

2 files

2.5.11

2 files

2.5.10

2 files

2.5.9

2 files

2.5.8

2 files

2.5.7

2 files

2.5.6

2 files

2.5.5

2 files

2.5.4

2 files

2.5.3

2 files

2.5.2

2 files

2.5.1

2 files

2.5.0

2 files

2.4.7

2 files

2.4.6

2 files

2.4.5

2 files

2.4.4

2 files

2.4.3

2 files

2.4.2

2 files

2.4.1

2 files

2.4.0

2 files

2.3.4

2 files

2.3.3

2 files

2.3.2

2 files

2.3.1

2 files

2.3.0

2 files

2.2.2

2 files

2.2.1

2 files

2.2.0

2 files

2.1.2

2 files

2.1.1

2 files

2.1.0

2 files

2.0.17

2 files

2.0.16

2 files

2.0.15

2 files

2.0.14

2 files

2.0.13

2 files

2.0.12

2 files

2.0.11

2 files

2.0.10

2 files

2.0.9

2 files

2.0.8

2 files

2.0.7

2 files

2.0.6

2 files

2.0.5

2 files

2.0.4

2 files

2.0.3

2 files

2.0.2

2 files

2.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page