Skip to content

how-to

Markdown to website, without a static site generator

You have a folder of .md files and you want it on the web. The usual answer is install a generator, pick a theme, write a config and wire up CI. Here is the version where you upload the folder.

published · 6 min read

the short version

Zip the folder and upload it. Folder names become sections, filenames become pages, a README or index file becomes the section’s front page, and relative links and images are rewritten to match. Search and navigation are built for you.

The route you were about to take

Search for how to publish Markdown and every answer has the same shape. It is a good route and it is much longer than the question deserved.

  • Choose a generator — MkDocs, Hugo, Docusaurus, Eleventy, Jekyll.
  • Install it, and whatever runtime it needs.
  • Pick a theme, install that too.
  • Write a config file, and learn its particular spelling of "navigation".
  • Write a CI workflow to build on push.
  • Choose somewhere to host the output, and point DNS at it.
  • Add a search plugin, because search is rarely included.
  • Maintain all of the above, forever.

Every one of those steps is reasonable in isolation, and together they are why a lot of Markdown never becomes a website. If your docs must live beside code in a repository, that cost is worth paying — the decision guide works through exactly when it is. This page is for when it is not.

What your folder becomes

The short route is: zip the folder, upload the zip. What matters is knowing what the structure turns into, so you can arrange it before rather than fix it after.

In your folderOn the site
A subfolderA section in the navigation, titled the way it reads
README.md or index.mdThat section’s front page
getting-started.mdA page, titled from its first heading
A relative link to another .mdA link to that page, rewritten
![](images/thing.png)The image, carried across, link rewritten
A fenced mermaid blockA rendered diagram
mkdocs.yml or zensical.tomlRead for site name, description, language and nav

So a folder like this arrives as three sections with their own front pages, and every relative link between them still resolves:

a folder that needs no preparation at all
docs/
  README.md
  getting-started/
    index.md
    install.md
    first-steps.md
  guides/
    index.md
    deploying.md
    images/diagram.png
  reference/
    cli.md
    config.md

You do not need a mkdocs.yml for this to work. If one happens to be in the zip we read it, so an existing project keeps its navigation — but a folder of plain Markdown with no config imports perfectly well on its own.

The steps

1. Tidy the folder, or do not

The only thing worth checking is that each page starts with a heading, because that heading becomes the page title. If a file opens with a paragraph, the title falls back to the filename, which is usually less readable.

Numbered filenames like 01-install.md are common and worth knowing about: you do not need them here. Order is set by dragging, so the numbers become noise in your URLs. Strip them if you like, or leave them and rename later.

2. Zip it and upload

A zip of Markdown and images, up to 200 MB. A single .md file works too if that is all you have. There is no build command to pick and no theme to install; the config is written for you.

3. Check the tree before the content

Look at the page list first. It is the navigation your readers will get, and it is where you notice that a folder you meant as a group came in as something else. Drag pages and folders into the order you want; sort A to Z puts it all back if you make a mess.

4. Publish

The site builds with full-text search, navigation and a 404 page already inside it. Search is generated at publish time and served from the site — there is nothing to sign up for and no index to pay for.

What you give up by not running a generator

This is the honest column, and it is short but real. Skipping the pipeline means skipping what the pipeline could have done.

  • No plugins. Nothing generating API reference from docstrings, no custom hooks at build time.
  • No theme forking. Four themes, a brand colour and a logo, rather than templates you control.
  • No build-time checks of your own — a link checker or a spell check you wired into CI does not come with you.
  • No offline or air-gapped build. The build happens here.
  • Docs no longer version with the code, because they are not in the repository any more.

If two or more of those matter, run the generator. That is not a consolation answer — it is the right one, and the tools are good.

Leaving again, whenever

The reasonable objection to uploading your Markdown somewhere is that you now have your Markdown somewhere. So the exit is worth stating plainly.

Export source gives you back your Markdown with a generated config that builds the site with plain Zensical — the generator written by the Material for MkDocs team — with nothing of ours involved. Export site gives you the built HTML, search index included, which works from a folder with no internet. Both are on every plan, including the free one.

That is the whole argument for taking the short route first. If the upload turns out to be all you needed, you are done in ten minutes. If you later need the pipeline, you leave with a folder of Markdown and a working config — which is roughly where you would have started anyway.

Questions

How do I turn Markdown files into a website?

Zip the folder and upload it. Subfolders become sections, README.md or index.md becomes a section’s front page, each .md becomes a page titled from its first heading, and relative links and images are rewritten to match. Search, navigation and a 404 page are built for you, with no generator to install and no config to write.

Do I need a static site generator to publish Markdown?

Not to get a website. You need to run one yourself if your docs must live in the same repository as your code, if pages are generated from source by a plugin, or if the build has to run offline. Otherwise a generator is a route to a static site rather than a requirement for one.

Do numbered filenames still control page order?

No, and you do not need them. Order is set by dragging pages and folders in the editor, and the tree you are looking at is the navigation the published site uses. Prefixes like 01- will simply show up in your URLs, so most people strip them.

What happens to my relative links and images?

Both are rewritten so they keep working. A relative link to another .md file becomes a link to that page, and images referenced from a folder inside the zip are carried across with their paths updated. Mermaid code fences render as diagrams on the published page.

Can I move to a static site generator later?

Yes. Export source hands back your Markdown together with a config that builds the same site with plain Zensical, on every plan including Free. Starting with an upload does not close the generator route; it just delays the decision until you know whether you need it.

Try the free plan instead of reading about it

One site, your own docszero.com subdomain, full-text search and the export button, free forever and without a card. Pro is $19.99 a month when you want your own domain, your own look and the badge gone.

  • Drag in a folder of Markdown, a zip, a Word document or a PDF
  • Search, navigation and a 404 page are built for you
  • Export the built site or the source on every plan, free included