Plok
Plok is a simple static podcast site generator written in Bash.
The code for Plok can be read and download here.
It scans a directory of MP3 files, reads their metadata with ffprobe, and generates:
index.html– a podcast homepagerss.xml– a Podcast RSS feed
The goal is to keep podcast publishing lightweight, portable and dependency-free, with no databases or web frameworks.
Features
- Generates HTML and Podcast RSS in one command.
- Reads episode title and description from MP3 metadata.
- Sorts episodes by filename.
- Supports optional recursive media scanning.
- Optional custom HTML episode template.
- Optional custom page header and footer.
- Automatically links URLs found in episode descriptions.
- UTF-8 output.
- Produces standards-compliant RSS suitable for podcast clients.
Requirements
- Bash
- ffprobe (FFmpeg)
- sed
- stat
Directory layout
.
├── media/
│ ├── 20260101-first-episode.mp3
│ └── 20260108-second-episode.mp3
├── site.conf
├── style.css (optional)
├── head.html (optional)
├── foot.html (optional)
├── item.html (optional)
└── plok
After running Plok:
.
├── index.html
└── rss.xml
Episode filenames
Episodes must begin with a date in the format:
YYYYMMDD
For example:
20260712-my-first-episode.mp3
20260719-another-episode.mp3
The filename date is used for the published date shown on the website and in the RSS feed.
MP3 metadata
Plok reads the following metadata tags:
| Tag | Purpose |
|---|---|
| TITLE | Episode title |
| DESCRIPTION | Episode synopsis |
If no title is present, the episode title defaults to Untitled.
site.conf
Example:
title: The Freebooters Podcast
description: Freebooters is where Chris and Drew talk nonsense and usually something happens with Linux.
author: The Freebooters
language: en-gb
category: Society & Culture
explicit: false
url: https://freebooters.uk
date_format: %d %b %Y
recursive: false
order: reverseConfiguration options
| Option | Description |
|---|---|
| title | Podcast title |
| description | Podcast description |
| author | Podcast author |
| language | HTML and RSS language code |
| category | iTunes podcast category |
| explicit | true or false |
| url | Base website URL |
| date_format | Date format used on the HTML page |
| recursive | Search subdirectories of media/ |
| order | forward or reverse |
Optional files
item.html
Overrides the built-in episode template.
Available placeholders:
{{title}}{{date}}{{url}}{{siteurl}}{{synopsis}}
If omitted, Plok uses its built-in template.
head.html
If present, inserted immediately after the opening <body> tag.
Useful for:
- site banner
- navigation
- logo
- introduction
foot.html
If present, inserted before the closing </body> tag.
Useful for:
- footer
- copyright notice
- links
style.css
If present, Plok automatically adds:
<link rel="stylesheet" href="style.css">to the generated HTML page.
Running
Generate the site:
plokThe generated files are:
index.htmlrss.xml