A back-end agnostic, zero compilation, markdown blogging platform
Please ★ this repo if you found it useful ★ ★ ★
This repo was revived in August 2026 as a working historical artifact.
The Polymer 1.x / bower / gulp 3 architecture is intact — nothing was
modernized — but the toolchain was made reproducible again. A Polymer 1.x
app still runs fine in current browsers because webcomponents-lite
polyfills everything (HTML imports, custom elements v0) that browsers have
since removed.
Requirements: docker (with compose) and GNU make. Run make prepare once
to install the remaining dev tools (bats, shfmt) via asdf.
make serve # dev server (gulp serve inside a node 8 container)
# -> http://localhost:8801 (try /#!/posts/hello-2026)
make build # legacy production build (vulcanize + minify) -> dist/
make test # legacy mocha unit tests (inside the container)
make test/e2e # bats smoke test: serves the app, curls rendered output,
# and (if chrome + node >= 22 are installed) drives
# headless Chrome over CDP to assert markdown renders
# to HTML in a real browser
make stop # tear the dev server down
make clean # remove build artifactsWithout make: docker compose -f docker/compose.yaml up and open
http://localhost:8801.
- bower deps repaired (
bower.json): themoleculesmeta-package (PolymerElements/molecules) was deleted from GitHub — replaced with a direct dependency onmarked-element(the only element this app used from it). Thewebcomponentsjs-safari-patchfork lost its0.7.xtags — now pinned to the exact master commit (patched 0.7.24), with aresolutionsentry so non-interactive installs resolve it. app/core/bower_componentsis vendored (committed, ~56MB, 145 packages): the bower registry and the 2017-era upstream repos are increasingly fragile (one had already vanished), so installing from the network is no longer required to run or build the app.gulp-envifyremoved: its manifest pins a deleted GitHub fork ofloose-envify, which broke everynpm install. Its single use in the gulpfile (substitutingprocess.env.NODE_ENVduring vulcanize) is now done withgulp-replace, which was already a dependency.- Toolchain containerized (
docker/Dockerfile): gulp 3'sgraceful-fs/nativesdependency aborts on node >= 10, and node 8 has no builds for modern hosts (e.g. darwin-arm64), so the toolchain runs in anode:8.17.0-stretchcontainer. The imagemin helpers (optipng,jpegtran) ship x86-only prebuilt binaries; the distro binaries from archive.debian.org are symlinked over them — the same fix the original 2017Dockerfileapplied on alpine. - Makefile + make.mk wrapper, bats smoke test (
tests/), and a sample post (hello-2026) proving markdown renders end-to-end.
- The original root
Dockerfile(alpine 3.5 production image with nginx, dnsmasq and thethingdown/prerendersidecar) is preserved untouched as a historical artifact, but is not expected to build in 2026 (dead apk repos, deadenvstamprelease URL). Usedocker/Dockerfileinstead. npm run demo(gh-pages deploy) and the Disqus module talk to external services and are out of preservation scope.- Some external badge/demo URLs in this README and the demo content are dead (docker hub build badges, blogdown.info) — kept for history.
| Feature | BlogDown | Jekyll | WordPress | Ghost |
|---|---|---|---|---|
| Single Page | ✔️ | ❌ | ❌ | ❌ |
| Page Transitions | ✔️ | ❌ | ❌ | ❌ |
| Modular Styles | ✔️ | ❌ | ❌ | ❌ |
| Custom Rendering | ✔️ | ❌ | ✔️ | ❌ |
| Taxonomies | ✔️ | ❌ | ✔️ | ❌ |
| No Compilation | ✔️ | ❌ | ✔️ | ✔️ |
| Commenting | ✔️ | ❌ | ✔️ | ✔️ |
| Server Agnostic | ✔️ | ✔️ | ❌ | ❌ |
| No Database | ✔️ | ✔️ | ❌ | ❌ |
| Modules/Plugins | ✔️ | ✔️ | ✔️ | ❌ |
| Themes | ✔️ | ✔️ | ✔️ | ✔️ |
-
Unzip the contents from HERE on your server
-
There is no step two. That's how easy it is to install BlogDown.
curl -OL https://github.com/thingdown/blogdown/releases/download/v0.2.0/blogdown.zip
unzip blogdown.zip && cd blogdown
python -m SimpleHTTPServerGo to http://localhost:8000
docker run --name some-blogdown -v /volumes/blogdown-content:/app/content -p 8801:8801 thingdown/blogdown:latestGo to http://localhost:8801
git clone https://github.com/thingdown/blogdown.git
yarn install # or `npm intall`
bower install
yarn start- Fork it!
- Create your feature branch:
git checkout -b my-new-feature - Commit your changes:
git commit -m 'Add some feature' - Push to the branch:
git push origin my-new-feature - Submit a pull request :D
Jam Risser © 2017
- Jam Risser - Author
- Polymer
