Export and Delivery
Podcast delivery (export) pushes your RSS feed and episode audio to a remote destination (S3, R2, FTP, SFTP, WebDAV, IPFS, SMB) so listeners can subscribe and download.
Credentials are encrypted at rest with the instance's HARBORFM_SECRETS_KEY. Full request-body examples and options are in the main README ("Export" section).
Podcast Delivery Overview
Podcast delivery (export) uploads your show's RSS feed and episode audio files to a remote server or storage. You configure one or more exports per show; each export has a destination (e.g. S3, FTP) and credentials.
Where to Configure
- Open the show (podcast) and go to Settings (or the show's delivery/export section).
- Find Podcast Delivery (or "Export," "Deploy").
- Add an export and choose the mode (S3, FTP, SFTP, WebDAV, IPFS, SMB). Fill in the required fields (bucket/path, credentials, and optional public base URL).
- Save. Credentials are stored encrypted using the instance's
HARBORFM_SECRETS_KEY.
Deploying
After you've built an episode (Build Final Episode) and optionally published it, deploy so the updated feed and new/changed audio files are pushed to the remote. When the episode has chapters, chapters.json is included in the deploy. The UI has a Deploy/Push action for each export. Only changed files are uploaded (the app uses ETag or similar to skip unchanged files).
Public Base URL
Many export types let you set a public base URL (e.g. your CDN or bucket URL). The generated RSS feed will use this URL for the feed itself and for episode audio enclosures, so subscribers and directories get the correct links.
Analytics Note
If you serve your podcast from a remote destination (e.g. S3 or your own CDN), the built-in analytics in HarborFM do not track plays for those remote files. Analytics apply to listens that go through the HarborFM host. See Analytics and the main README.
See Also
- S3 and R2
- FTP, SFTP, WebDAV, IPFS, SMB
- Making the final episode
- Main README - Export section (full JSON examples and options)
S3 and R2 Export
You can deploy your RSS feed and episode audio to AWS S3, Cloudflare R2, Backblaze B2, or any S3-compatible storage.
S3 (AWS)
Configure an export with mode S3 (or "S3" in the UI). You'll need:
- Bucket name and optional prefix (folder path).
- Region (e.g.
us-east-1). - Access key ID and Secret access key (IAM user with read/write to the bucket).
- Public base URL (optional) - e.g.
https://my-bucket.s3.amazonaws.comor your CloudFront URL so the feed and enclosures use the correct listener-facing URLs.
R2 (Cloudflare)
Use the same S3-compatible mode with R2-specific settings:
- Bucket, prefix, region (use
autofor R2). - Endpoint URL - e.g.
https://YOUR_ACCOUNT_ID.r2.cloudflarestorage.com. - R2 Access key ID and Secret access key (from R2 dashboard).
- Public base URL - e.g. your R2 public bucket URL or custom domain.
B2 (Backblaze)
Again use S3-compatible mode:
- Bucket, prefix, region (e.g.
us-west-002for B2). - Endpoint URL - e.g.
https://s3.us-west-002.backblazeb2.com. - B2 key ID and application key.
- Public base URL - your B2 bucket URL or custom domain.
See Also
- Podcast delivery overview
- FTP, SFTP, WebDAV, IPFS, SMB
- Main README - Export section (full JSON examples for S3, R2, B2)
FTP, SFTP, Webdav, IPFS, and SMB Export
Besides S3-compatible storage, HarborFM can deploy to FTP, SFTP, WebDAV, IPFS, and SMB. Configure each as a separate export in Podcast Delivery on the show settings.
FTP
- Mode: FTP.
- Host, port (usually 21), username, password.
- Path - Remote directory for the feed and audio (e.g.
/public/podcast). - Secure - Use TLS if your server supports it.
- Public base URL - Optional; URL where the feed and files will be served (e.g.
https://cdn.example.com/podcast).
SFTP
- Mode: SFTP.
- Host, port (usually 22), username, password (or private key PEM for key-based auth).
- Path - Remote directory.
- Public base URL - Optional.
Webdav
- Mode: WebDAV.
- URL - WebDAV base URL (e.g.
https://webdav.example.com/remote.php/dav/files/user/). - Username, password.
- Path - Subpath for the podcast (e.g.
podcast/). - Public base URL - Optional.
IPFS
- Mode: IPFS.
- API URL - Your IPFS node API (e.g.
http://127.0.0.1:5001). Optional API key, username, password if the node is behind auth (e.g. Caddy). - Path - Optional path/prefix.
- Gateway URL - Public gateway for resolving content (e.g.
https://ipfs.io). - Public base URL - Optional; e.g. your own gateway.
SMB
- Mode: SMB.
- Host, port (default 445), share name, username, password, optional domain (for Windows domain auth).
- Path - Path within the share (e.g.
feed/). - Public base URL - Optional; URL where you serve the feed and files (e.g. via a web server in front of the share).
See Also
- Podcast delivery overview
- S3 and R2
- Main README - Export section (full JSON examples for each mode)