CastKeeper is a free application for archiving podcasts. It is designed to be easy to self-host, published as a Docker container. It supports a variety of file storage options.
CastKeeper was built primarily to do 2 things:
- Store copies of podcasts, safe from being taken offline or being modified (e.g. due to abandonment or editorial changes), allowing for future re-listening.
- Transcribe and index the text content of those podcasts, allowing searching for when certain topics were discussed (coming very soon in a future release).
The CastKeeper documentation is available at castkeeper.org.
Contributions are welcome. If you wish to contribute more than bug-fixes, please start a discussion in GitHub issues first to ensure the feature is desired - as I want to make sure your time isn't wasted.
- Go 1.25
- Node.js 22
- Docker and Docker Compose (or equivalent)
# Install tools and dependencies
make install# Run unit tests + static analysis checks
make test
# Run unit tests only
go test ./... -short -count=1
# Run E2E tests
docker compose up -d
make test_e2eTo run locally with the default configuration, using local object storage:
# Create a user to log in with (first time only)
make create_user USERNAME=testuser
# Run server
make run
# or, watch and rebuild on file changes
make watchVisit the web UI at: http://localhost:8080
To run locally with the alt configuration, using S3 (localstack):
# Start Docker Compose
docker compose up -d
# Create a user to log in with (first time only)
make create_user_alt_config USERNAME=testuser
# Run server
make run_alt_configVisit the web UI at: http://localhost:8081
CastKeeper Copyright (C) 2025 George Webb
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.