A fan-made, open-source desktop player for the Aadam Jacobs Collection on the Internet Archive. Tauri 2 + React 19 + TypeScript with a multi-theme UI and an HTML5 Audio engine.
This is a fan tribute, not an official project. It streams public recordings from archive.org and is unaffiliated with the AJC project. It is free and non-commercial β no ads, no tracking, no money is made from it, and it hosts or redistributes no audio of its own; everything is played directly from archive.org's public endpoints.
- Single integrated window β top bar with search and back/forward, left Your-Library sidebar (Search / Likes / Recent / Artists / Years / Venues), main content panel, always-visible bottom player bar.
- Custom HTML5
AudioEngineβ queue, shuffle, repeat, seek, volume. No Webamp, no native audio pipeline. - Polite Rust proxy to archive.org β 4 concurrent, 200 ms min gap,
retry/backoff on 429/503/5xx, project-identifying
User-Agent. - Live collection index β loads the Aadam Jacobs Collection through
archive.org's advanced search API, then caches the normalized show index
in
localStoragefor faster future launches. In-memory MiniSearch powers fuzzy global search. - Likes and listening history β liked shows/tracks and recent plays are stored locally in the app.
- MP3 VBR default, FLAC toggle per show, selected on the show page.
Downloads are attached to the GitHub Releases page for macOS, Windows, and Linux.
The current builds are unsigned:
- macOS: Gatekeeper may block the first launch. Right-click
Taper Player.appand choose Open. - Windows: SmartScreen may warn. Choose More info β Run anyway if you trust this build.
- Linux: make the AppImage executable if needed:
chmod +x Taper*.AppImage.
This is expected for the first public release. The app is open source, free, non-commercial, and does not include ads or tracking.
Four built-in themes β dark (default), light, vintage-1 (Winamp-style),
and vintage-2 (Windows Media Player-style):
| dark | light |
| vintage-1 (Winamp) | vintage-2 (Windows Media Player) |
- Node.js 18+ and Yarn classic (1.x) β
yarn.lockis committed. - Rust stable (1.77+) with
cargoβ Tauri's build driver. Install via rustup. - Platform build tools:
- macOS: Xcode Command Line Tools (
xcode-select --install). - Linux:
libwebkit2gtk-4.1-dev,libssl-dev,libgtk-3-dev,librsvg2-dev,libayatana-appindicator3-dev. - Windows: MS Visual Studio C++ build tools + WebView2.
- macOS: Xcode Command Line Tools (
See Tauri's prerequisites guide for the authoritative list.
yarn install
yarn build
yarn tauri dev
# For Desktop development, run:
yarn tauri dev
# For Android development, run:
yarn tauri android init
yarn tauri android dev
# For iOS development, run:
yarn tauri ios init
yarn tauri ios devyarn build (= tsc && vite build) is a fast frontend-only smoke test.
See docs/DEVELOPMENT.md for prerequisites, scripts, and debugging tips.
yarn tauri dev launches the raw debug binary, which isn't wrapped in a
macOS .app bundle. For testing the real binary app run:
yarn tauri build
open "src-tauri/target/release/bundle/macos/Taper Player.app"| Doc | What's in it |
|---|---|
| docs/SPEC.md | Product spec and roadmap notes. |
| docs/ARCHITECTURE.md | Directory layout, provider composition, data flow diagrams. |
| docs/DATA.md | IA proxy, normalizers, index loader, cache, MiniSearch. |
| docs/PLAYER.md | AudioEngine state machine, PlayerBar, play-show flow. |
| docs/UI.md | Design tokens, layout grid, view-by-view tour. |
| docs/DEVELOPMENT.md | Dev setup, scripts, Tauri config, linting plans. |
| docs/RELEASES.md | CI release workflow, tagging flow, signing caveats. |
The collection and the work behind it:
- Aadam Jacobs β for recording 10,000+ concerts and donating them to the Internet Archive.
- Brian Emerick and the volunteer digitization and cataloging team.
- The Internet Archive β for hosting the collection.
- aadamjacobscollection.org β the official project site.
Taper Player is independent of and unaffiliated with any of the above.
I was having way too much fun listening to the collection in a browser tab, and figured it deserved a dedicated desktop app instead of hunting for the right tab every time. So I vibe-coded this with Claude Code β and now it just sits there playing the collection while I do anything else. πΆ
MIT. See LICENSE.
See DISCLAIMER.md and NOTICE for the non-affiliation and non-commercial statement.