StackStoreHQ/go-fm has 45 GitHub stars and 7 forks. Star changes are not measured yet. Last checked 2026-11-09 07:14 UTC. Last push 2026-10-22.
A real-time audio streaming server written in Go. No longer maintained—use bun-fm instead:bunfm.com
Measured star growth
- in 24h
- Update delayed
- in 7 days
- Update delayed
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalGoFM
[!WARNING] This project is no longer maintained. GoFM is the Go (Golang) version of this project. We recommend using bun-fm instead, where future development and major new features will be focused.
GoFM is a cross-platform real-time audio streaming server written in Go. It allows you to stream MP3 audio files from a specified directory over HTTP and synchronize playback across multiple clients.

Usage
To use GoFM, download the latest release from the Releases page and run the server with the following command:
./GoFM -d /path/to/your/music/directory
By default, GoFM listens on port 8090. You can customize the server's behavior using the following command-line options:
-p int
Specifies the server port number (default 8090).
-host string
Specifies the server host address (default "0.0.0.0").
-r
Enables random playback mode.
-debug
Enables debug mode for the server.
-d string
Specifies the directory to play audio files from (default "/path/to/your/music/directory").
-h
Shows help information.
-n string
Specifies the name of the FM (default "GoFM").
For example, to change the server's port number to 8080, use the -p option followed by the desired port number, like this:
./GoFM -d /path/to/your/music/directory -p 8080
You can find more information about GoFM on STACKSTORE.
Docker
You can run GoFM using Docker. A Dockerfile is provided for multi-stage build (Go 1.20 -> Alpine runtime).
Build Image
docker build -t go-fm:latest .
Optional: pass a custom version (overrides conf/version.txt):
docker build --build-arg VERSION=v1.0.0 -t go-fm:v1.0.0 .
Run Container
Assuming your host music directory is ~/music (Linux/macOS) or D:\\music (Windows PowerShell example below):
PowerShell:
docker run -d --name gofm `
-p 8090:8090 `
-v D:\music:/music:ro `
go-fm:latest
Linux/macOS:
docker run -d --name gofm \
-p 8090:8090 \
-v ~/music:/music:ro \
go-fm:latest
Custom options (e.g. random mode + custom name + different port):
docker run -d --name gofm \
-p 8080:8080 \
-v ~/music:/music:ro \
go-fm:latest -d /music -p 8080 -r -n "MyFM"
GitHub Container Registry (GHCR) Publish
Create a Personal Access Token (classic) or a fine‑grained PAT with
read:packages,write:packages(anddelete:packagesif you need) scopes.Login to GHCR:
```bash echo <YOUR_GHCR_PAT> | docker login ghcr.io -u <YOUR_GITHUB_USERNAME> --password-stdin ```Build image with a version tag (example uses repository
StackStoreHQ/go-fm):```bash docker build -t ghcr.io/stackstorehq/go-fm:latest -t ghcr.io/stackstorehq/go-fm:$(cat conf/version.txt | tr -d '\r') . ```Push tags:
```bash docker push ghcr.io/stackstorehq/go-fm:latest docker push ghcr.io/stackstorehq/go-fm:$(cat conf/version.txt | tr -d '\r') ```(Optional) Add a README for the package: In GitHub UI go to
Packages->go-fm->Edit.
GitHub Actions Automation
Create .github/workflows/docker.yml (example) to auto-build on release tags:
name: Build & Publish Docker
on:
push:
tags:
- 'v*'
permissions:
contents: read
packages: write
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract version
id: vars
run: |
VERSION=$(cat conf/version.txt | tr -d '\r')
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Build & Push (multi-arch)
uses: docker/build-push-action@v6
with:
context: .
push: true
platforms: linux/amd64,linux/arm64
tags: |
ghcr.io/stackstorehq/go-fm:latest
ghcr.io/stackstorehq/go-fm:${{ steps.vars.outputs.version }}
build-args: |
VERSION=${{ steps.vars.outputs.version }}
After pushing a tag like v0.2.4, the workflow will publish both latest and the versioned tag to GHCR. Consumers pull with:
docker pull ghcr.io/stackstorehq/go-fm:latest
Or a specific version:
docker pull ghcr.io/stackstorehq/go-fm:v0.2.4
License
GoFM is released under the MIT License. Feel free to use, modify, and distribute the software. Contributions are welcome!
Explore related projects
ytdl-org/youtube-dl
Command-line program to download videos from YouTube.com and other video sites
141,500 starsexcalidraw/excalidraw
Virtual whiteboard for sketching hand-drawn like diagrams
135,396 starsgodotengine/godot
Godot Engine – Multi-platform 2D and 3D game engine
119,840 starsmrdoob/three.js
JavaScript 3D Library.
117,983 stars