audio streaming app
plyr.fm
1---
2title: plyr.fm docs
3description: documentation for plyr.fm — audio streaming on ATProto
4template: splash
5hero:
6 title: plyr.fm docs
7 tagline: audio streaming on ATProto
8 actions:
9 - text: start listening
10 link: https://plyr.fm
11 icon: right-arrow
12 - text: for developers
13 link: /developers/
14 variant: minimal
15---
16
17import Stats from '../../components/Stats.astro';
18import TrackSearch from '../../components/TrackSearch.astro';
19import TrendingTracks from '../../components/TrendingTracks.astro';
20import HeroWaveform from '../../components/HeroWaveform.astro';
21
22<HeroWaveform />
23
24<div class="landing-section">
25 <div class="audience-grid">
26 <a href="/listeners/" class="audience-card">
27 <span class="audience-icon">♫</span>
28 <h3>listeners</h3>
29 <p>stream music, build playlists, discover artists</p>
30 </a>
31 <a href="/artists/" class="audience-card">
32 <span class="audience-icon">♪</span>
33 <h3>artists</h3>
34 <p>upload tracks, embed players, own your data</p>
35 </a>
36 <a href="/developers/" class="audience-card">
37 <span class="audience-icon"></></span>
38 <h3>developers</h3>
39 <p>public API, python SDK, MCP server</p>
40 </a>
41 <a href="/contributing/" class="audience-card">
42 <span class="audience-icon">⚙</span>
43 <h3>contributors</h3>
44 <p>open source — help build the platform</p>
45 </a>
46 </div>
47</div>
48
49<div class="landing-section">
50 <h2>hear it</h2>
51 <TrendingTracks />
52</div>
53
54<div class="landing-section">
55 <h2>search tracks</h2>
56 <TrackSearch />
57</div>
58
59<div class="landing-section">
60 <h2>platform stats</h2>
61 <Stats />
62</div>
63
64<div class="landing-section">
65 <h2>your music, your data</h2>
66 <p style="color: var(--sl-color-gray-2); font-size: 0.9rem; margin-bottom: 1rem;">
67 every track on plyr.fm is an ATProto record in the artist's personal data repo — including <a href="https://plyr.fm/u/plyr.fm" style="color: var(--sl-color-accent);">plyr.fm's own dev podcasts</a>. here's the latest one:
68 </p>
69 <div class="record-example">
70
71```json
72{
73 "$type": "fm.plyr.track",
74 "album": "2026",
75 "title": "plyr.fm update - February 27, 2026",
76 "artist": "plyr.fm",
77 "audioUrl": "https://pub-d4ed8a1e39d44dac85263d86ad5676fd.r2.dev/audio/ada9cadc63efd822.wav",
78 "duration": 265,
79 "fileType": "wav",
80 "audioBlob": {
81 "$type": "blob",
82 "ref": {
83 "$link": "bafkreifnvhfnyy7p3ara2gdyv6krztsd26luv2mi45j7hw3sreq7xjpd24"
84 },
85 "mimeType": "audio/vnd.wave",
86 "size": 12760890
87 },
88 "createdAt": "2026-02-27T16:08:13.146107Z"
89}
90```
91
92 </div>
93 <p style="color: var(--sl-color-gray-3); font-size: 0.8rem; margin-top: 0.75rem;">
94 the API is public. build your own player, analytics, or recommendation engine — the data is open.
95 </p>
96</div>
97
98<div class="landing-section" style="text-align: center; margin-top: 4rem;">
99 <p style="color: var(--sl-color-gray-3); font-size: 0.8rem;">
100 questions? <a href="mailto:plyrdotfm@proton.me" style="color: var(--sl-color-accent);">plyrdotfm@proton.me</a>
101 </p>
102</div>