Author Manual
Themes Guide
Open Source
Why Not To Use fpm?
Open Source
Known Issues

Remixing Static Site Generator

FPM is a static site generator. What it means it generates a set of static files that we can host on any static site host, eg nginx on your custom server, or on Github Pages, Vercel etc.

If you checkout fpm.dev, this site is built using fpm. The document that you are reading right now is here.

remixing.ftd gets published on /remixing/ that you are reading right now
-- ft.page: Remixing Static Site Generator

FPM is a static site generator. What it means it generates a set of
static files that we can host on any static site host, eg nginx on
your custom server, or on [Github Pages](https://pages.github.com),

... omitted the rest ...

So someone has written the above code, and when we “build it”, using fpm build, it generates and HTML page that looks like this.

This is what static site generators do. ssg or static site generator is a “category” of software, there are a lot of software in this category. For example if you visit this list of generators, you see a lot of them:

There are three hundred plus static site generators!

One of them that we compare ourselves to is Docusaurus. Jekyll was the original static site generator, one can argue, it started the entire category. It was created by Tom Preston-Werner, founder of Github!

Most (all?) of these are open source licensed and fpm is also open source, BSD licensed. We hope to be on that list, someday we will send a pull request to them.

So FPM is a static site generator like all these ones, but compared to them, we have a special feature: remixing sites.

What Does Remixing Site Mean?
Lets consider this: A lot of books and blogs are hosted on Github etc, that have permissive licenses. For example if you search on Github, repositories that have “Creative Commons” license,

170 Thousand creative common licensed repos!

A huge majority of them are books, or learning material of some sort. There is learning material on interview practices, or for learning Java, and so on. There is a huge amount of content that is freely available, free as in free speech, creative commons! We are allowed to do whatever we want with them. We can republish them if we wanted for example.

But, unfortunately, it is not easy to remix this content or curate a custom book or learning resource for the specific audiance you are catering to. It can be just for your team, or your students in your class, or maybe even if you want to assign a task to someone, what if you can create a custom one off book containing the relevant information to just perform this task.

For example say I like some chapter from the advanced java book, and they would need to know some bits about git so some content from git-flight-rules, and maybe we will be deployong in aws so some relevant bits from the open guide to Amazon Web Services.

But the java book is in PDF form. And the other two are in Markdown. And while everything is open source, I have license to, and I am sure the authors of those projects would want me to remix these content, I just do not have a way to take portions selectively from these projects. Even if the whole thing is not PDF, and is organised in small markdown files, currently there is no good way to “remix” these contents.

Precision Learning: Why Is Remixing Really Important?

We Are Not Talking Piracy Here

We will honour copy rights. You can chose to give your content for free or you can ask that whoever includes your content pay you a reasonable share.

It is today not easy to create a “remixed or curated documentaiton”, which includes content from one or more of such books to create a custom documentation site for you.

Currently you can copy the markdown files from those repositories, as one time thing, or create a script to keep the copied markdown files up to date when the upstream content changes.

Compare this with the way we add depndencies in Node or Python etc to other code, you do not have to download the packages, the package manager downloads your dependencies. Your package manage can also check if the packages have been updated.