Skip to content

Qilletni/Qilletni

Repository files navigation

Qilletni

WebsitePackage DocsNative API Docs

A high-performance DSL for curating music queues and playlists - declarative, composable, and music service-agnostic.


Overview

Qilletni is a Domain-Specific Language designed to orchestrate and manipulate music queues, playlists, and metadata across multiple streaming platforms.

Where most music platform APIs are either vastly different from one another or require a learning curve, Qilletni abstracts platform-dependent logic and lets you focus on actual algorithms and orchestration. Qilletni treats music concepts as native constructructs, featuring smart conversion across service providers' types. Extension of the language is easy with a package system and native functions that seamlessly invoke Java methods. Qilletni is a statically typed and object-oriented with a familiar C-style syntax that leverages composition over inheritance.

See the Getting Started page in the docs to start using Qilletni.

Key Features

Music as a First-Class Citizen

Native types feature song, collection, album, and weights, all of which can be converted between service providers seamlessly. The play keyword can put songs in your account's queue, add it to a list, or invoke a callback. Example:

Basic music types code example

Weighted Playlists

Playlists may be played as a whole, but may be weighted which changes the distribution of songs, or adds in custom logic for song selection.

Below is an example of playing 20 songs from a playlist "My Songs" which is 10 songs, with weights applied.

Basic weighted playlist code example

The played songs with and without weights applied:

Weighted distribution example

For a more detailed look at this specific example, with more visualizations, see the weights documentation.

And a more exhaustive example of what weights can do:

Advanced weighted playlist code example

Multi-Platform Support

Current supported platforms are Spotify, Tidal, and Last.fm. These are provided by external packages called service providers, and are not baked into the language.

Service providers can also convert native types across platforms seamlessly.

Conversion between provider examples

Familiar Syntax

Qilletni features C-style syntax, with basic objects represented as Entities. The following is a simple example featuring Qilletni's syntax.

Syntax demo code

Package Management

Qilletni has full support for publishable packages with the Qilletni Package Manager (QPM). The backend is hosted via Cloudflare Workers, and uses GitHub for authentication.

For information on package management, see the package management docs.

Official Qilletni packages are documented via the custom documentation generator. To view docs of these packages such as postgres, http, or json, see https://docs.qilletni.dev/.

About

A highly capable Domain Specific Language to programmatically create platform agnostic music queues and playlists

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors