By R. S. Doiel, 2025-09-05
Antenna is a feed oriented content management tool. In this tutorial it’ll be used to build a very simple blog. I’ll cover using the antenna command, describe how you can use Markdown for configuring the blog and posting content to the blog. Antenna is configured using YAML configuration files and HTML pages and posts are assembled using a YAML configuration.
The first thing we need is a directory to hold our website. That can be done from a terminal on Linux, macOS or Windows using the following command.
mkdir myblog
We want to change into that directory.
cd myblog
Now we’re ready to begin.
The Antenna application, antenna has an “initialization”
action. This creates the configuration file needed for your blog. Here’s
what you need to type in the terminal (same for Linux, macOS and
Windows).
antenna init
This will result in a file called “antenna.yaml” being created. This is the main configuration file for Antenna. The “init” action will also create a “page.yaml” file1. This is a page generator description in YAML. It contains the information to take a post or list of feed items and render a web page. If you are using macOS or Linux you can type the following and see them.
ls -l
On Windows you would use the dir command instead.
dir
A blog is built from three parts
In terms of Antenna these are contained in a collection which needs to be defined. Then we use the post action to add Markdown documents, with front matter, as blog posts. The post action also generates an HTML version of the post based on the settings in the front matter. Finally the RSS feed and HTML aggregation page are render by Antenna’s generate action. That’s pretty much it.
Let’s first create our collection. I am going to call it “index.md”. The reason I call it “index.md” is that it will result in an HTML page called “index.html” as well as an RSS file called index.xml and an OPML file called “index.opml”.
---
title: My blog
---
# Welcome to My Blog
This is My blog where I use the Antenna app to curate a simple blog.
The Markdown forms the definition of the "index.md" collection. The blog
will be managed in the "index.db" SQLite3 database. It can be configured by
modifying the "page.yaml" file generated when this collection is added to the
Antenna configuration using the "add" action.That’s all that is needed, save this Markdown document as “index.md”. Now let’s add this to our Antenna collection. We only need to do this once.
antenna add index.md
If you list the directory you should see “index.db” and “page.yaml”. You can modify the “page.yaml” to set the various HTML elements that will host either the list of blog posts or the individual blog post content.
ls -1 index.* page.*
or for Windows.
dir index.* page.*
I am going to assume the first blog post is called “welcome.md”. I am also going to assume you’ll using a blog oriented directory structure. For this example today’s date is September 5th, 2025. I need to create a place to hold my blog post “welcome.md”. I will first create a directory to hold it.
mkdir -p blog/2025/09/05
On Windows
New-Item -ItemType Directory -Force -Path blog\2025\09\05
Now you need to open the a new file in that directory called “welcome.md”. If you have VS Code or Codium installed as your editor you can do the following.
code blog/2025/09/05/welcome.md
Or for Windows.
code blog\2025\09\05\welcome.md
In that file create our welcome post. We need to include the following attributes in our front matter, “postPath”, “link”, “pubDate”. Here’s my version of “welcome.md” Markdown.
---
title: Welcome
postPath: "blog/2025/09/05/welcome.html"
pubDate: "2025-09-05"
---
# Welcome
This is a demonstration of Blogging with Antenna.NOTE: If you are on Windows, you’ll want to use the version of
postPath that looks like this,
postPath: blog\2025\09\05\welcome.html. You can now add the
the post using the post action.
antenna post index.md blog/2025/09/05/welcome.md
Or on Windows
antenna post index.md blog\2025\09\05\welcome.md
We’re are almost done. You should see the version of welcome.md you created and a new “welcome.html” generated when you use the post action. We need to generate the index.html and index.xml files with the updated post.
antenna generate
You can preview your new blog post at
http://localhost:8000 using the preview action and pointing
your web browser at that URL.
antenna preview
Any time you run the post command on your Markdown file the post with the matching link and postPath gets updated. Below I open and update the “welcome.md” file. Then I post it again to regenerate the HTML page.
code blog/2025/09/05/welcome.md
antenna post index.md blog/2025/09/05/welcome.md
That’s it you now can add and update posts for your blog. Antenna
will manage the index.html and index.xml documents for you when you run
the antenna generate command again. You then use the
preview action to view it in your web browser.
NOTE: If this was your blog you’d change the value I used for the
link element to match how your website is structured and use it’s URL. I
used a localhost URL with port number just to keep things simple and to
allow us to test using the antenna preview.
You will likely want some navigation and other text on your blog pages. This is accomplished by updating the “index.yaml” file. In this file you can set the path to your custom CSS, to any JavaScript script you might want to include. You can also set your site header, footer and nav elements. Finally you can even include HTML elements before and after the generated content. Here’s an example of a customized “page.yaml” file.
link:
- rel: stylesheet
href: css/site.css
header: |
<h1>Welcome to My Blog</h1>
nav: |
<ul>
<li><a href="/">Home</a></li>
</ul>
footer: |
<!-- your custom footer inner HTML goes here -->Now re-post your welcome.md then generate followed by preview to see the changes.
antenna post index.md blog/2025/09/05/welcome.md
antenna generate
antenna preview
You’re blog is staged you can now publish on the Internet using the tools provided by your host. If you’re using GitHub that might mean committing and pushing to a specific branch setup for your website (see GitHub pages documentation).
Happy blogging!
The file paths to posts can be whatever you want.
Antenna doesn’t impose an structure. Traditionally a structure broken
down for year, two digit month and another for two digit days is common.
So posts are contained in a director called “blog” it’ll have a path
broken to by year, month and day. The day directory holds the blog post.
Example I have a post called “updates.md” for the date August 5th, 2025.
That might be held in blog/2025/08/05/updates.md Markdown
file.↩︎
The file paths to posts can be whatever you want.
Antenna doesn’t impose an structure. Traditionally a structure broken
down for year, two digit month and another for two digit days is common.
So posts are contained in a director called “blog” it’ll have a path
broken to by year, month and day. The day directory holds the blog post.
Example I have a post called “updates.md” for the date August 5th, 2025.
That might be held in blog/2025/08/05/updates.md Markdown
file.↩︎