Awesome Open Source
Awesome Open Source


npm version build status minified size gzipped size

tonal is a music theory library. Contains functions to manipulate tonal elements of music (note, intervals, chords, scales, modes, keys). It deals with abstractions (not actual music or sound).

tonal is implemented in Typescript and published as a collection of Javascript npm packages.

It uses a functional programing style: all functions are pure, there is no data mutation, and entities are represented by data structures instead of objects.


import { Note, Interval, Scale } from "@tonaljs/tonal";

Note.midi("A4"); // => 60
Note.freq("a4").freq; // => 440
Note.accidentals("c#2"); // => '#'
Note.transpose("C4", "5P"); // => "G4"
Interval.semitones("5P"); // => 7
Interval.distance("C4", "G4"); // => "5P"
Scale.get("C major").notes; // =>["C", "D", "E", "F", "G", "A", "B"];


Install all packages at once:

npm install --save @tonaljs/tonal


Tonal is compatible with both ES5 and ES6 modules, and browser.

ES6 import:

import { Note, Scale } from "@tonaljs/tonal";

ES5 require:

const { Note, Scale } = require("@tonaljs/tonal");


You can use the browser version from jsdelivr CDN directly in your html:

<script src=""></script>

Or if you prefer, grab the minified browser ready version from the repository.

Bundle size

@tonaljs/tonal includes all published modules.

Although the final bundle it is small (~10kb minified and gzipped), you can reduce bundle sizes even more by installing the modules individually, and importing only the functions you need:

npm i @tonaljs/note
import { transpose } from "@tonaljs/note";
transpose("A4", "P5");


Generally, you just need to install:

The API documentation lives inside file of each module

Notes and intervals

Scales and chords

Keys, chord progressions

Time, rhythm



Read contributing document for instructions


This library takes inspiration from other music theory libraries:

Projects using tonal

Showcase of projects that are using Tonal:

Thank you all!

Add your project here by editing this file


MIT License

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
javascript (68,065
typescript (10,392
music (569
functional (146
scale (68
interval (25

Find Open Source By Browsing 7,000 Topics Across 59 Categories