A MusicBrainz JSON Web Service Version 2 client

Usage no npm install needed!

<script type="module">
  import nodebrainz from '';


Another Musicbrainz Node Client

Build Status Total views

NodeBrainz is a thin wrapper that gives you full access to the MusicBrainz API (Version 2). This includes search, lookup and browse. It has zero dependences, consumes only JSON (no blocking XML parsing), and includes a powerful Lucene search feature.

Example Usage

MusicBrainz asks that you identifying your application so be sure to set the userAgent. You may consider following the conventions of RFC 1945

var NB = require('nodebrainz');

// Initialize NodeBrainz
var nb = new NB({userAgent:'my-awesome-app/0.0.1 ( )'});

Setting a custom host, basePath, port and defaultLimit (if not set, the defaultLimit is 25 and port is 80);

var nb = new NB({host:'localhost', port:8080, basePath:'/path/to/data/', defaultLimit:50});

Also supported are automatic retries for Musicbrainz rate-limiting.

var nb = new NB({retryOn: true, retryDelay: 3000, retryCount: 3});

MusicBrainz Entities

There are eight entities: artist, label, recording, release, release-group, work, area, url


Lookups can be preformed on any of the eight entities.

Lookup an artist and include their releases, release-groups and aliases

nb.artist('e0140a67-e4d1-4f13-8a01-364355bee46e', {inc:'releases+release-groups+aliases'}, function(err, response){

Lookup a release-group with no filtering or subqueries

nb.releaseGroup('df46f245-7f62-4982-9d2c-e83d7be91cbf', function(err, response){

There are different subqueries you can include depending on the entities.

  • Arists - recordings, releases, release-groups, works
  • Label - releases
  • Recording - artists, releases
  • Release - artists, labels, recordings, release-groups
  • Release-group - artists, releases

Check out the some of the additional subqueries. Note that the number of linked entities returned is always limited to 25, if you need the remaining results, you will have to perform a browse or search.


Browse requests are a direct lookup of all the entities directly linked to another entity. For example, if you wanted to look up all the release-groups for a particularly talented artist:

nb.browse('release-group', {artist:'e0140a67-e4d1-4f13-8a01-364355bee46e'}, function(err, response){

Browsed entities are always ordered alphabetically by gid. If you need to sort the entities, you will have to fetch all entities and sort them yourself. For pagination, set a limit and offset.

nb.browse('release-group', {artist:'e0140a67-e4d1-4f13-8a01-364355bee46e', type:'album', limit:2, offset:1}, function(err, response){

Note that browse requests are not searches, in order to browse all the releases-groups for an artist, you need to provide the MBID for the artist.


Provides a way to search for entities. Behind the scenes, results are provided by a search server using Lucene technology.'artist', {artist:'tool', country:'US'}, function(err, response){

Search Fields

There are different search fields depending on the entity.

Search for all releases for the artists named pink floyd. Limited to 20 and offset by 5'release', {artist:'pink floyd', limit:20, offset:5}, function(err, response){

Search for all the studio albums for a specific artist (identified by their artist ID)'release-group', {arid:'e0140a67-e4d1-4f13-8a01-364355bee46e', type:"album"}, function(err, response){

Lucene Search

Create powerful queries using luceneSearch. View the syntax guide

nb.luceneSearch('artist',{query:'artist:t??l AND -artist:"Jethro Tull"', limit: 2, offset: 1}, function(err, response){