
Company News
Socket Named Top Sales Organization by RepVue
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.
@southctrl/musixmatch-lyrics
Advanced tools
Unofficial Musixmatch lyrics API wrapper for Node.js
No official API key required. Simple, clean, and efficient.
npm install @southctrl/musixmatch-lyrics
// For ES6 / TypeScript (default export)
import MusixmatchLyrics from '@southctrl/musixmatch-lyrics';
// For JavaScript (dynamic import) - CORRECT SYNTAX
const { default: MusixmatchLyrics } = await import('@southctrl/musixmatch-lyrics');
// For CommonJS environments that support dynamic imports
const MusixmatchLyrics = (await import('@southctrl/musixmatch-lyrics')).default;
const mxm = new MusixmatchLyrics();
(async () => {
const lyricsResult = await mxm.getLrc('Imagine Dragons - Believer');
if (!lyricsResult || (!lyricsResult.synced && !lyricsResult.unsynced)) {
console.log('No lyrics found');
} else {
const lyricsText = lyricsResult.synced || lyricsResult.unsynced;
const track = lyricsResult.track || { title: 'Imagine Dragons - Believer', author: '' };
console.log(`Lyrics for: ${track.title} by ${track.author}`);
console.log(lyricsText);
}
})();
The class is exported as a DEFAULT export, not a named export!
✅ CORRECT:
// ES6 modules
import MusixmatchLyrics from '@southctrl/musixmatch-lyrics';
// Dynamic import
const { default: MusixmatchLyrics } = await import('@southctrl/musixmatch-lyrics');
❌ INCORRECT:
// This will cause "MusixmatchLyrics is not a constructor" error
import { MusixmatchLyrics } from '@southctrl/musixmatch-lyrics';
// This will also fail
const MusixmatchLyrics = require('@southctrl/musixmatch-lyrics');
Lyrics for: Believer by Imagine Dragons
First things first
I'ma say all the words inside my head
The way that things have been, oh-ooh
Second things second
Don't you tell me what you think that I could be
I'm the one at the sail, I'm the master of my sea, oh-ooh
The master of my sea, oh-ooh
... (truncated for brevity)
You can use this package directly from the command line:
node src/example.cjs "Imagine Dragons - Believer"
getLrc(query: string): Promise<{ synced?: string, unsynced?: string, track?: object }>
findLyrics(query: string): Promise<string>
Unofficial LRCLib lyrics API integration for even more sources.
// For ES6/TypeScript (default export)
import api from '@southctrl/musixmatch-lyrics';
// For JavaScript dynamic import
const api = (await import('@southctrl/musixmatch-lyrics')).default;
const { lrclib } = api;
(async () => {
const result = await lrclib.getLyrics({
track_name: 'I Want to Live',
artist_name: 'Borislav Slavov',
album_name: "Baldur's Gate 3 (Original Game Soundtrack)",
duration: 233,
});
console.log(result);
})();
getLyrics({ track_name, artist_name, album_name?, duration? })
searchLyrics({ track_name, artist_name })
getCachedLyrics({ track_name, artist_name, album_name?, duration? })
Genius lyrics API integration. Requires a Genius API client access token.
import api from '@southctrl/musixmatch-lyrics';
api.genius.setAccessToken('YOUR_GENIUS_ACCESS_TOKEN');
const { genius } = api;
genius.setAccessToken('YOUR_GENIUS_ACCESS_TOKEN');
(async () => {
const search = await genius.searchSong('Taylor Swift - 22');
const songId = search.response.hits[0].result.id;
const lyricsUrl = await genius.getLyricsUrl(songId);
console.log('Lyrics page:', lyricsUrl);
})();
setAccessToken(token: string)
searchSong(query: string)
getLyricsUrl(songId: number)
OVH lyrics API integration. No API key required.
const { ovh } = api;
(async () => {
const result = await ovh.getLyrics({
artist: 'Taylor Swift',
title: '22',
});
console.log(result.lyrics);
})();
getLyrics({ artist, title })
This happens when using incorrect import syntax. Make sure you're importing the default export:
// ✅ Correct
const { default: MusixmatchLyrics } = await import('@southctrl/musixmatch-lyrics');
// ❌ Wrong - will cause constructor error
const MusixmatchLyrics = require('@southctrl/musixmatch-lyrics');
If you're using this in a mixed CommonJS/ESM environment:
// In async context
const MusixmatchLyrics = (await import('@southctrl/musixmatch-lyrics')).default;
// Or create a wrapper function
async function createMusixmatch() {
const { default: MusixmatchLyrics } = await import('@southctrl/musixmatch-lyrics');
return new MusixmatchLyrics();
}
MIT
FAQs
Unofficial Musixmatch lyrics API wrapper for Node.js
The npm package @southctrl/musixmatch-lyrics receives a total of 6 weekly downloads. As such, @southctrl/musixmatch-lyrics popularity was classified as not popular.
We found that @southctrl/musixmatch-lyrics demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.

Security News
NIST will stop enriching most CVEs under a new risk-based model, narrowing the NVD's scope as vulnerability submissions continue to surge.

Company News
/Security News
Socket is an initial recipient of OpenAI's Cybersecurity Grant Program, which commits $10M in API credits to defenders securing open source software.