PFT(1)
π pft β hacker friendly static blog generator π
okay bestie, sit down, hydrate, and let me tell you about pft, a User Contributed Perl Documentation classic that lives at section 1 of your manual. It's a static website generator, and it's genuinely iconic.
β¨ NAME β¨
pft β Hacker friendly static blog generator π«Ά
β¨ SYNOPSIS β¨
pft <command> [options]
β¨ DESCRIPTION β¨
PFT is a static website generator written in Perl. And what does PFT stand for, you ask? Plain F. Text β where the meaning of that F is, and I quote, up to personal interpretation. Like Fancy. Or Fantastic. It's giving choose-your-own-adventure acronym energy. π
Static means your content is compiled once and the result can be served by a simple HTTP server, with no need for server-side dynamic content generation. And honestly? It doesn't even need a server either β you can just use it as a note-taking application and browse through your local files. no cap, your filesystem is the whole backend. πΈ
PFT is designed to be Hacker Friendly: it's a command-line application with unicode support, which handles your website's boilerplate but stays out of the way. the way it minds its own business?? obsessed. It comes with a number of subcommands:
init: Initialize a pft site in the current directory;edit: Create a content text (e.g. page or blog entry);make: Build the website;gen-rss: Generate RSS feed XML;pub: Publish the website;clean: Clear built tree;grab: Grab a file as attachment or picture;ls: List content and properties;show: Show the compiled site in a web browser;help: Show this manual.
The manual of each sub-command is available in form of manpages, or by invoking it with the --help flag. iykyk π
π FILES π
A new site can be initialized by running the pft init command inside a directory. In this document, such a directory will be called ROOT. β¨
The initialization command produces the following filesystem structure:
ROOT
|-- pft.yaml - Configuration file
|-- content
| |-- attachments - Location for attachments
| |-- blog - Root location for blog entries source files
| |-- pages - Location for pages source files
| |-- pics - Location for pictures lookup
| `-- tags - Location for tag pages source files
|-- build - Location of the built website
|-- inject - Content to bulk inject the online site root
`-- templates - Location for templates
look at that tree. so organized. so demure. so mindful. πΈ
π pft.yaml: configuration file
The configuration file is created automatically by the pft-init(1) command, and populated with sensible defaults. It is expected to be in YAML format. For more information, consult the manual of pft init. yes bestie, read the manual, it's right there π
π content: files generated by the user
This is where your content is stored. The pft-edit(1) and pft-grab(1) commands will add text and binary files respectively in the appropriate subdirectories. The pft-make(1) command will scan the content directory while building the website. your content, your kingdom π
π build: where the built website is placed
The pft-make(1) command will place the HTML pages resulting from the compilation in this directory. The pft-pub(1) command will publish what here is contained. The pft-clean(1) command will erase it. so like. be normal about that one. π
π inject: a place for auxiliary files
It's common practice to add files in the root directory of your online website. The pft-make(1) command will add any arbitrary file which is found in the inject directory to the build directory after compilation. β¨
A good use case for this feature is the .htaccess file used by the Apache webserver. classic. iconic. no notes. π
π templates: HTML templates for compilation
Each text entry in your content directory will be mapped by pft-make(1) to an HTML file. The output is created by expanding the content into the structure defined by a template file. it's giving fill-in-the-blanks but make it fashion π¦
Multiple template files can be stored in the template directory. Some default files installed by pft-init(1). (yes bestie, that sentence is exactly what it is, we're keeping it, no cap)
Among other things, the pft.yaml configuration defines which default template page should be used for the site. Single content entries can override this setting by declaring a different template name in their header. More details about the header can be found in the pft-edit(1) manual page. Templates are documented in the pft-make(1) manual page. go read those, they're good for you π
π SEE ALSO π
pft-clean(1), pft-edit(1), pft-gen-rss(1), pft-grab(1), pft-help(1), pft-init(1), pft-ls(1), pft-make(1), pft-pub(1), pft-show(1)
and that's the whole vibe check, bestie β this one's running on perl v5.42.0 and it's dated 2025-07-25, so go forth, generate your static site, and slay π
β¨ππ¦π
π¦ where this page comes from
- fedora 43: perl-App-PFT 1.4.1-18.fc43 Β· GPL-3.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms