Castopod: A Self-Hosted PHP Podcast Platform for Independent Podcasters
Castopod is an open-source hosting platform made for podcasters who want engage and interact with their audience. Synchronized read-only mirror of https://code.castopod.org/adaures/castopod
At a glance
- What is it?
- Castopod is a free and open-source podcast hosting platform that puts distribution and data under the podcaster's control. It ships as a complete PHP application, but the thin README and pre-release version number signal that important setup knowledge lives outside the repository.
- Who is it for?
- Castopod suits podcasters who can maintain a PHP server and prefer owning their distribution channel over paying a managed host. It is a poor fit for those who want a quick start without server administration skills, or for teams expecting polished documentation before deploying version 2.0.0-next.3.
- Can I use it commercially?
- Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
- Is it still maintained?
- Yes. The repository last received commits 116 days ago.
- What is it written in?
- Mainly PHP, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 28, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What Castopod Solves and Who It Targets
Commercial podcast hosting services make distribution easy but take the feed URL, listener analytics, and subscriber data onto their own infrastructure. Castopod is for podcasters who want to change that. It is a self-hosted application: you run it on your own server, keep the RSS feed at your own domain, and retain direct ownership of the data your listeners generate.
The target audience is podcasters who have, or can hire, someone comfortable with a Linux server, a MySQL database, and basic PHP hosting. It is not a turnkey appliance. The README points to a getting-started page at castopod.org for installation, meaning practical knowledge about system requirements sits partly outside the repository itself. The AGPL-3.0 licence means anyone who modifies and hosts the software for others must publish their changes.
Architecture and Configuration Model
Castopod is built in PHP and uses CodeIgniter as its framework, which is visible from the `spark` CLI entry point at the repository root. The front end is compiled with Vite and TypeScript, using Tailwind CSS for styling and CodeMirror for any in-app editing fields. amCharts 4 handles analytics charts inside the admin panel.
Configuration happens through a single `.env` file. The file covers four concerns: the instance URLs, the database connection, email delivery via SMTP, and caching. The admin interface sits at the `cp-admin` path by default, and the authentication gateway uses `cp-auth`. An analytics salt is required as a randomised string of 64 characters. Cache defaults to file-based storage, with Redis available as an alternative for higher-traffic deployments.
The repository also includes a `docker/` directory, and Docker deployment is a common search topic for Castopod, though the README itself only references the getting-started page on castopod.org for full deployment instructions.
Installing Castopod: Server Requirements and the .env File
The README states that Castopod comes pre-packaged with all required static assets and dependencies, so there is no front-end build step for the end user. Download the release archive from castopod.org/getting-started and extract it to your web server's document root.
After extraction, copy `.env.example` to `.env` and edit it with your real values. The file documents the required fields:
app.baseURL="https://YOUR_DOMAIN_NAME/"
media.baseURL="https://YOUR_MEDIA_DOMAIN_NAME/"
admin.gateway="cp-admin"
auth.gateway="cp-auth"
analytics.salt="RANDOM_STRING_OF_64_CHARACTERS"The database block expects a running MySQL instance:
database.default.hostname="localhost"
database.default.database="castopod"
database.default.username="root"
database.default.password="****"
database.default.DBPrefix="cp_"Once the environment file is in place, navigate to `/cp-install` in your browser to complete the guided installation. This browser-based step creates the database tables and the initial administrator account. Email delivery through SMTP is optional but needed for account notifications; the `.env.example` shows the SMTP fields commented out, so the installation proceeds without them.
The Pre-Release Status and What It Means in Practice
The `package.json` in the repository shows version 2.0.0-next.3. A version string with a `next` pre-release tag is not a minor detail: it signals that the API, configuration format, or database schema may still change before the stable 2.x release.
The repository has no GitHub releases. Canonical releases are managed on code.castopod.org, the upstream Forgejo instance, and the GitHub repository is described as a read-only mirror. Contributions sent to GitHub will not be accepted; the CONTRIBUTING.md directs all merge requests to the original repository.
This two-server setup complicates tracking changes. A team that wants to monitor release notes must watch code.castopod.org, not the GitHub mirror, and self-hosters upgrading from 1.x should check the changelog there for any migration steps before deploying 2.0.0-next.3 on a production site.
Limitations: What the Repository Does Not Document
The README for the GitHub mirror is deliberately minimal. There is no embedded installation checklist, no list of PHP version requirements, no nginx or Apache configuration examples, and no upgrade instructions. All of that information is on castopod.org, which means any outage or restructuring of that site leaves self-hosters without the documentation they need.
Media storage is handled through a separate `media.baseURL` environment variable, implying that podcast audio files can live on a different origin. The README does not document whether this means object storage such as S3 is supported, or whether a local filesystem path is the only tested option.
Castopod is the wrong choice for podcasters who want to offload server management. Keeping PHP, MySQL, and the web server patched, maintaining TLS certificates, and handling backups are all the operator's responsibility. The AGPL-3.0 licence is also a constraint: any service built on Castopod that is offered to others must publish any modifications. Operators running version 2.0.0-next.3 should also account for the possibility of schema changes before the final 2.0.0 release, which makes running it alongside an unrelated production workload on the same database server a risky choice.
Comparing Castopod to Managed Podcast Hosts
Buzzsprout is a managed podcast hosting service: you upload audio, Buzzsprout handles the RSS feed, CDN delivery, analytics, and Apple Podcasts submission. There is nothing to install and nothing to patch. The trade-off is that Buzzsprout controls your feed URL, your listener data, and your ability to move if the service changes its pricing.
Castopod's approach is the opposite. You run the server, you own the feed URL at your own domain, and you keep the analytics data. That ownership is meaningful for podcasters building long-term listener relationships, but it comes with ongoing maintenance. Migrating away from Castopod is simpler than migrating away from a managed service because the RSS feed lives at your domain; changing the application behind it does not break existing subscribers.
For podcasters who want open-source self-hosting but need more complete documentation, Funkwhale is another option. Funkwhale is a federated audio platform written in Python and Django, with a more mature set of deployment guides. It covers music and other audio, not just podcasts, which is a different scope than Castopod.
Licence, Maintenance, and Contribution Path
Castopod is licensed under AGPL-3.0. This means the source code is freely available, but any modified version offered over a network as a service must also be made available under the same licence. For a private self-hosted deployment used only by the podcaster themselves, the AGPL imposes no additional requirements.
The last push to the repository was on 2026-06-05. The project is under active development leading toward the 2.0.0 stable release. A crowdin.yml at the repository root shows that translations are managed through Crowdin, and the contributor list in the README includes roles for translation alongside code and design.
The canonical home for issues, merge requests, and releases is code.castopod.org/adaures/castopod. Filing a bug or contributing a feature requires an account on that instance, not GitHub. The GitHub repository mirrors the code for visibility but does not accept pull requests or issues.
Editorial conclusion
Castopod suits podcasters who can maintain a PHP server and prefer owning their distribution channel over paying a managed host. It is a poor fit for those who want a quick start without server administration skills, or for teams expecting polished documentation before deploying version 2.0.0-next.3. Before committing, verify that your server meets the PHP and MySQL requirements listed in the .env.example file, and confirm you are comfortable that contributions and canonical releases are tracked on code.castopod.org, not GitHub.
Frequently asked questions
Does Castopod work with standard podcast directories like Apple Podcasts?
The README does not document directory submission directly, but Castopod generates a standard RSS feed at your own domain, which is the format required by Apple Podcasts, Spotify, and similar directories.
Can Castopod be deployed with Docker?
The repository includes a docker/ directory, and Docker deployment is a common use pattern for Castopod. For detailed instructions, the project points to its getting-started page at castopod.org.
What licence does Castopod use, and does it restrict self-hosting?
Castopod uses AGPL-3.0. A private self-hosted deployment for your own podcast imposes no additional obligations. Offering a modified version as a service to others requires publishing the source changes under the same licence.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/ad-aures-castopod)