🌩️A reimplementation of Winamp 2.9 in HTML5 and Javascript
Switch branches/tags
add-methods application b butterchurn-options button-position cdn clean-up close clutter conf confirm-close context-menu copy-paste-cruft create-object-url data-uri deploy-foo deploy dev drag eject embed enable-equalizer eslint-plugin-react eslint-react fft fix-add-file fix focusedKeyDown gh-pages greenkeeper-babel-cli-6.16.0 greenkeeper-babel-cli-6.18.0 greenkeeper-babel-cli-6.22.0 greenkeeper-babel-cli-6.22.1 greenkeeper-babel-cli-6.22.2 greenkeeper-babel-core-6.17.0 greenkeeper-babel-core-6.22.0 greenkeeper-babel-core-6.22.1 greenkeeper-babel-plugin-transform-object-rest-spread-6.22.0 greenkeeper-babel-plugin-transform-react-jsx-6.22.0 greenkeeper-babel-preset-es2015-6.16.0 greenkeeper-babel-preset-es2015-6.18.0 greenkeeper-babel-preset-es2015-6.22.0 greenkeeper-babel-preset-react-6.16.0 greenkeeper-babel-preset-react-6.22.0 greenkeeper-css-loader-0.26.0 greenkeeper-jest-cli-19.0.0 greenkeeper-jest-cli-19.0.1 greenkeeper-jest-cli-19.0.2 greenkeeper-jszip-3.1.0 greenkeeper-jszip-3.1.1 greenkeeper-jszip-3.1.2 greenkeeper-jszip-3.1.3 greenkeeper-rc-slider-7.0.0 greenkeeper-rc-slider-7.0.1 greenkeeper-rc-slider-7.0.2 greenkeeper-react-15.3.2 greenkeeper-react-15.4.0 greenkeeper-react-15.4.1 greenkeeper-react-15.4.2 greenkeeper-redux-3.6.0 greenkeeper-redux-thunk-2.1.2 greenkeeper-redux-thunk-2.2.0 greenkeeper-style-loader-0.17.0 greenkeeper-update-all greenkeeper/initial initial-layout lazy-load-butterchurn lazy-zip-bubble m3u mapdispatchtoprops master media-session media-state ml mono move music-metadata-minimal netlify-redirect new-layout no-var openfiles organize package pixel-offset pixel-oscillascope playlist-on playlist pre-compiled-skin preload-skin prod-build production react-main-window react-up react redux ref-main-ref ref-main refac refactor-oscilloscop refactor-preset-loading refactor-presets refactor-winamp-js report require revert-658-serialize-indexdb serialize-dont-measure serialize-indexdb serialize skin snapshots test-netlify test-reducer tests thunk travis-tests travis type-scrollbar type-webamp-lazy-take-2 typescript unify-windows unrevert-serialize upgrade-babel v1.2.0 visualizer-extract visualizer-react webamp webpack-upgrade-take-5 webvs weighin weighingz window-manager
Nothing to show
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
config We don't use jsmediatags any more Nov 20, 2018
css Clicking anywhere in a slider should make the button depressed Nov 21, 2018
docs Add more press Oct 21, 2018
examples RIP rawgit Oct 9, 2018
experiments Use new skin schema in twitter bot Oct 21, 2018
images Add butterchurn share link Jun 1, 2018
js Improve parsing of viscolor Dec 15, 2018
mp3 Fix corrupt mp3 Feb 7, 2018
presets Add builtin presets json Nov 9, 2018
scripts Use default port fo compiling skin Nov 21, 2018
skins Add Internet Archive skin Oct 2, 2018
.babelrc Remove redundent plugin declaration Nov 20, 2018
.editorconfig Format css according to prettier default config Oct 20, 2018
.eslintignore Ignore built asset from eslint Apr 1, 2018
.eslintrc Teach ESLint and Jest about .tsx Sep 18, 2018
.gitignore Ignore snapshot diffs in git Jul 3, 2018
.prettierignore Ask Google Analytics to anonymize IPs Aug 11, 2018
.travis.yml Disable travis-weigh-in again Apr 15, 2018
CHANGELOG.md Add some things to the changelog Oct 23, 2018
LICENSE.txt Add a license Jan 31, 2015
README.md Open webapck dev server when we start Nov 20, 2018
favicon.ico Add favicon Dec 6, 2014
index.d.ts Add zIndex to public api type Oct 6, 2018
index.html Add Webamp icon when webamp is closed Nov 12, 2018
jest-puppeteer.config.js Add Puppeteer snapshot testing Jun 29, 2018
netlify.toml Build the library on Netlify so that folks can access master. Jun 24, 2018
package.json Tag beta release Dec 15, 2018
redux.md Revert "Revert "Serialize to indexdb" (#664)" Oct 6, 2018
static.d.ts Typescript cli (#647) Aug 28, 2018
tsconfig.json Format tsconfig.json Sep 18, 2018
yarn.lock update butterchurn deps (#709) Nov 30, 2018


Travis Codecov Discord


A reimplementation of Winamp 2.9 in HTML5 and JavaScript.

As seen on TechCrunch, Motherboard, Gizmodo, Hacker News (1, 2, 3, 4), and elsewhere.

Give it a try!

Screenshot of Webamp

Works in modern versions of Edge, Firefox, Safari and Chrome. IE is not supported.


Check out this Twitter thread for an illustrated list of features: https://twitter.com/captbaritone/status/961274714013319168

Use Webamp in your own project

I've tried to make it possible to include Webamp in your own project.

See the usage documentation for more information.


# Or: npm install
npm start

http://localhost:8080/ should automatically open in your browser.

# Run tests and lint checks
npm test

Building the demo site (webmap.org)

npm run build
npm run serve

Open the local ip/port that is output to the console in your browser.

Building the NPM module

npm run build-library


npm test

This will run both the tests and the linter.


Netlify watches GitHub for new versions of master. When a new version is seen, it is automatically built using npm run build and pushed to the server. Additionally, Netlify will run a build on every pull request and include a link under the heading "Deploy preview ready!". This enables easy high level testing of pull requests.

In short, deploying should be as simple as pushing a commit to master.

Additionally, if you want to fork the project, deploying should be as simple as setting up a free Netlify account.

Advanced Usage

There are some "feature flags" which you can manipulate by passing a specially crafted URL hash. Simply supply a JSON blob after the # of the URL to change these settings:

  • skinUrl (string) Url of the default skin to use. Note, this file must be served with the correct Allows Origin header.
  • audioUrl (string) Url of the default audio file to use. Note, this file must be served with the correct Allows Origin header.
  • initialState (object) Override the initial Redux state. Values from this object will be recursively merged into the actual default state.

Note: These are intended mostly as development tools and are subject to change at any time.


Join our community chat on Discord: https://discord.gg/fBTDMqR

There are a few related projects that have communites:



  • Webamp2x An impressive implementation from 2002(!).
  • JsAmp An implementation from 2005 by @twm (via Hacker News).
  • LlamaCloud Comp From 2011 by Lee Martin (via Twitter)
  • Winamp em HTML5 e Javascript In 2010 a developer named Danilo posted one of his HTML5 experiments: "an audio player simulating good old Winamp". You will have to download the zip file.
  • JuicyDrop An HTML5 implementation with less emphasis on being true to the skin, but fully featured visualizations. @cggaurav is keeping it alive on GitHub
  • Spotiamp The folks at Spotify reimplemented Winamp as a frontend for Spotify. Not in a browser, and only runs on Windows.


  • Butterchurn, the amazing Mikdrop 2 WebGL implementation. Built and integrated into Webamp by: jberg
  • Research and feature prototyping: @PAEz
  • Beta feedback, catching many small UI inconsistencies: LuigiHann
  • Beta feedback and insider answers to obscure Winamp questions: Darren Owen
  • Donating the webamp NPM module name: Dave Eddy

Thank you to Justin Frankel and everyone at Nullsoft for Winamp which inspired so many of us.


While the Winamp name, interface, and, sample audio file are surely property of Nullsoft, the code within this project is released under the MIT License. That being said, if you do anything interesting with this code, please let me know. I'd love to see it.