{"id":15117030,"url":"https://github.com/elemaudio/elementary","last_synced_at":"2025-09-27T22:31:58.101Z","repository":{"id":163120158,"uuid":"586907635","full_name":"elemaudio/elementary","owner":"elemaudio","description":"Elementary is a JavaScript library for digital audio signal processing.","archived":false,"fork":false,"pushed_at":"2024-04-16T13:32:05.000Z","size":5511,"stargazers_count":275,"open_issues_count":10,"forks_count":21,"subscribers_count":13,"default_branch":"main","last_synced_at":"2024-04-21T22:10:21.195Z","etag":null,"topics":["audio","dsp","functional","javascript"],"latest_commit_sha":null,"homepage":"https://www.elementary.audio/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/elemaudio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-01-09T14:11:28.000Z","updated_at":"2024-04-25T14:30:33.968Z","dependencies_parsed_at":null,"dependency_job_id":"f38456d6-7b59-42c4-a975-90acb151fc33","html_url":"https://github.com/elemaudio/elementary","commit_stats":null,"previous_names":[],"tags_count":41,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elemaudio%2Felementary","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elemaudio%2Felementary/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elemaudio%2Felementary/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elemaudio%2Felementary/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/elemaudio","download_url":"https://codeload.github.com/elemaudio/elementary/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234462130,"owners_count":18837272,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio","dsp","functional","javascript"],"created_at":"2024-09-26T01:45:47.423Z","updated_at":"2025-09-27T22:31:56.902Z","avatar_url":"https://github.com/elemaudio.png","language":"C","readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg height=\"120px\" src=\"https://www.elementary.audio/Lockup.svg\" alt=\"Elementary Audio logo\" /\u003e\n  \u003cbr /\u003e\u003cbr /\u003e\n\n  [![CI Status](https://github.com/elemaudio/elementary/actions/workflows/main.yml/badge.svg)](https://github.com/elemaudio/elementary/actions)\n  [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/elemaudio/elementary/blob/main/LICENSE.md)\n  [![Discord Community](https://img.shields.io/discord/826071713426178078?label=Discord)](https://discord.gg/xSu9JjHwYc)\n  [![npm installs](https://img.shields.io/npm/dt/%40elemaudio/core?label=npm%20installs\u0026color=%23f472b6)](https://www.npmjs.com/package/@elemaudio/core)\n\n\u003c/div\u003e\n\n---\n\n[**Elementary**](https://elementary.audio) is a JavaScript library for digital audio signal processing.\n\n* **Declarative:** Elementary makes it simple to create interactive audio processes through functional, declarative programming. Describe your audio process as a function of your application state, and Elementary will efficiently update the underlying audio engine as necessary.\n* **Dynamic:** Most audio processing frameworks and tools facilitate building static processes. But what happens as your audio requirements change throughout the user journey? Elementary is designed to facilitate and adapt to the dynamic nature of modern audio applications.\n* **Portable:** By decoupling the JavaScript API from the underlying audio engine (the \"what\" from the \"how\"), Elementary enables writing portable applications. Whether the underlying engine is running in the browser, an audio plugin, or an embedded device, your JavaScript layer remains the same.\n\n## Getting Started\n\nEvery Elementary application starts with the [@elemaudio/core](https://www.elementary.audio/docs/packages/core) package ([npm](https://www.npmjs.com/package/@elemaudio/core), [source](./js/packages/core)), which provides the\nframework for defining your audio processes and a generic set of utilities for performing the graph rendering and reconciling steps.\n\nNext, because Elementary is designed to be used in a number of different environments, there are several different ways to integrate.\nIf you're new to the project, we recommend studying the following workflows to get the feel of working in Elementary:\n\n* Use the [@elemaudio/web-renderer](https://www.elementary.audio/docs/packages/web-renderer) package ([npm](https://www.npmjs.com/package/@elemaudio/web-renderer), [source](./js/packages/web-renderer)) with your favorite frontend UI library to make an audio web application\n* Use the [@elemaudio/offline-renderer](https://www.elementary.audio/docs/packages/offline-renderer) package ([npm](https://www.npmjs.com/package/@elemaudio/offline-renderer), [source](./js/packages/offline-renderer)) with Node.js for static file processing\n\nOnce you're ready to dive in, we suggest starting with one of these ideas:\n\n* Jump into the [online playground](https://www.elementary.audio/playground) for the quickest way of experimenting with sound\n* Make an audio effects plugin following the [SRVB plugin template](https://github.com/elemaudio/srvb)\n* Try the small [command line tool](https://github.com/elemaudio/elementary/tree/main/cli) here in this repository to explore an example native integration\n* Check out the [Native Integrations](https://www.elementary.audio/docs/guides/Native_Integrations) guide for embedding Elementary's C++ engine in your own native code\n* Read the [Custom Native Nodes](https://www.elementary.audio/docs/guides/Custom_Native_Nodes) guide for extending Elementary's built-in DSP library with your own low-level processors\n\n## Documentation\n\nYou can find the Elementary documentation [on the website](https://elementary.audio/), or if you like, you can jump straight into:\n\n* [Guides](https://elementary.audio/docs/guides/Making_Sound/)\n* [Tutorials](https://www.elementary.audio/docs/tutorials/distortion-saturation-wave-shaping)\n* [Project Showcase](https://www.elementary.audio/showcase)\n\nIf you need help, join the community on the [Elementary Audio Discord](https://discord.gg/xSu9JjHwYc) and ask any questions you have!\n\n## Releases\n\nReleases are made both here in GitHub and deployed to [npm](https://www.npmjs.com) following npm's semver conventions. Because your project may need to coordinate both\nthe native C++ library and the corresponding JavaScript dependencies, it may be helpful to understand our release conventions.\n\n* Canary releases are always made first on the `develop` branch using git tags\n    * Corresponding JavaScript packages are deployed to npm tagged `next` to indicate their status\n* After a brief validation period, canary releases are promoted to `main` via git merge\n    * The corresponding JavaScript packages are then tagged `latest`, making them the default install candidates on npm\n    * At this time a new GitHub Release is written to mark the update and document the changelog\n\nAs a general rule of thumb, we recommend integrating Elementary via the `main` branch of this repo and the corresponding `latest` packages on npm. If you\nwant to target the more bleeding edge, you can integrate via the git tags on the `develop` branch and the corresponding `next` packages on npm.\n\n## Contributing\n\nWe'd love to get you involved! Right now, the primary focus is to promote and grow the Elementary community. So if you want to help, consider:\n\n* Making an open source project with Elementary, like [this one](https://github.com/bgins/coincident-spectra) or [this one](https://github.com/teetow/elementary_grid)\n* Writing your own higher-level modules and sharing them on npm, [like this](https://github.com/nick-thompson/drumsynth/)\n* Writing your own custom native nodes to extend the engine and sharing them on GitHub\n\nIf you're more interested in digging in under the hood, check out the [open issues](https://github.com/elemaudio/elementary/issues) to see where we need help right now. Note that while we're\nfocusing on the community around Elementary, the immediate goals in this repository are ease of use, extensibility, and performance. We will likely be\ncareful and slow to add new features, so if there's a particular feature you want to see here, please [open an issue](https://github.com/elemaudio/elementary/issues/new) to start a conversation around your\nproposal first.\n\nIf you wish to become involved in the project beyond development, you could [become a sponsor](https://github.com/sponsors/nick-thompson). This form of assistance is deeply valued and instrumental in propelling the project forward. We are genuinely grateful for any support you choose to provide.\n\n## License\n\nElementary is [MIT licensed](./LICENSE.md).\n","funding_links":["https://github.com/sponsors/nick-thompson"],"categories":["C"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felemaudio%2Felementary","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felemaudio%2Felementary","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felemaudio%2Felementary/lists"}