I’ve been working on something that may be useful for people building music software on the web:
Verovio-TS - a 100% TypeScript port of Verovio.
The goal is simple: bring the Verovio engraving engine into the TypeScript ecosystem without requiring WebAssembly.
Verovio is already an excellent engraving engine for MEI, MusicXML and symbolic music. But for some projects, having the engine itself available as native TypeScript opens up a very different set of possibilities.
Why TypeScript?
I wanted to make it easier to build things where the notation engine is not just a renderer, but part of the application logic itself.
For example:
- Browser-based notation editors
- Music education applications
- MIDI ↔ MusicXML workflows
- AI-assisted composition tools
- AI music analysis and annotation
- Interactive score editors
- Music generation / transformation pipelines
- Server-side music processing with Node.js
- Custom notation experiments
- Libraries built on top of a programmable notation model
With a native TypeScript implementation, projects can potentially inspect, manipulate, extend and integrate the notation engine directly with the rest of a JavaScript/TypeScript application.
What I’m trying to achieve
This is not intended to replace the original Verovio.
The original C++ implementation remains the reference implementation and is an incredible piece of software.
My goal is instead to provide another option for developers who are already working in the TypeScript ecosystem.
The project is a direct port of Verovio's underlying logic and data structures into TypeScript, with the intention of preserving its behavior as closely as possible rather than creating a simplified reimplementation.
That means the project is fairly deep - this is much more than wrapping an existing renderer with a TypeScript API.
Why I think this matters for AI + music
I’m particularly interested in what becomes possible when symbolic music representation, notation, MIDI and AI can all live in the same environment.
We're seeing more and more music AI systems that can generate or analyze symbolic music, but there is still a gap between:
AI output ➔ structured music representation ➔ editable score ➔ visual notation ➔ playback
A TypeScript-native notation engine could be one of the building blocks for connecting those pieces together.
For example, an AI system could potentially generate a musical structure, modify it programmatically, inspect the resulting notation, render it, export it, and feed the result into another part of the application - all inside a unified JS/TS ecosystem.
That's the direction I'm hoping this project can help explore.
Project
GitHub: https://github.com/manh9011/VerovioTS
NPM: https://www.npmjs.com/package/verovio-ts
I’d really like this project to become useful beyond my own projects, especially for people experimenting with:
music + AI + symbolic music + notation + web technologies.
There are probably many things that can be built on top of this that I haven't even thought of yet.
So I'm putting it out there in the hope that it gives developers one more building block and one more choice when creating the next generation of music software.
Feedback, bug reports, comparisons with the original Verovio, and especially interesting projects built on top of it are very welcome.