{"id":14008041,"url":"https://github.com/cblgh/plain","last_synced_at":"2025-07-25T04:33:23.624Z","repository":{"id":57642137,"uuid":"390101318","full_name":"cblgh/plain","owner":"cblgh","description":"network .md into .html with plaintext files","archived":false,"fork":false,"pushed_at":"2025-03-20T11:10:22.000Z","size":1076,"stargazers_count":79,"open_issues_count":0,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-05-20T12:07:20.358Z","etag":null,"topics":["html","markdown","plaintext","ssg","static-site-generator"],"latest_commit_sha":null,"homepage":"https://cblgh.org","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cblgh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"cblgh","patreon":"cblgh","open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2021-07-27T19:20:05.000Z","updated_at":"2025-03-20T10:54:00.000Z","dependencies_parsed_at":"2023-01-29T21:15:44.198Z","dependency_job_id":"af30e8bc-6ce7-40f9-846c-43b2afe559d4","html_url":"https://github.com/cblgh/plain","commit_stats":{"total_commits":24,"total_committers":1,"mean_commits":24.0,"dds":0.0,"last_synced_commit":"093bbe9d21f9eab1a19b995ff9ed4149a6cf30bb"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/cblgh/plain","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cblgh%2Fplain","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cblgh%2Fplain/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cblgh%2Fplain/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cblgh%2Fplain/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cblgh","download_url":"https://codeload.github.com/cblgh/plain/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cblgh%2Fplain/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266954600,"owners_count":24011831,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-25T02:00:09.625Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["html","markdown","plaintext","ssg","static-site-generator"],"created_at":"2024-08-10T11:01:10.888Z","updated_at":"2025-07-25T04:33:23.574Z","avatar_url":"https://github.com/cblgh.png","language":"Go","funding_links":["https://github.com/sponsors/cblgh","https://patreon.com/cblgh"],"categories":["Go"],"sub_categories":[],"readme":"# plain\n_network markdown files into html with plaintext files_\n\n![plain in use over at https://cblgh.org](https://cblgh.org/media/plain.png)\n\nplain is a static-site generator operating on [plaintext\nfiles](https://en.wikipedia.org/wiki/Plain_text) containing a small set of commands and\nmarkdown input.\n\n## Why\nOriginal impetus:\n\n* Server crashed leading to a lost web folder which contained manual-ish copied html files / pandoc'd wiki articles; many gone, post-crash\n* Wanted something to republish markdown articles from my wiki to static html files, and update an article index\n* Grew tired of my old website, mostly due to the markup—but honestly also the design\n\n## What\n\nplain revolves around converting individual markdown files into a network of html pages,\nfocusing on frictionless use.\n\nAside from markdown manipulation, plain enables you to copy entire directories into your\nwebroot while also connecting the copied directory to your other pages. You can author\nconceptual articles in markdown, while being free to mix in the occasional bespoke page, when\nthe mood/humor/fever strikes.\n\nAdditional capabilities of plain include generating rss feeds for discrete\nwebsite categories, highlighting articles in the header nav, creating link-only\narticle dumps, automatically generate opengraph images for no-effort social\nmedia link previews.\n\nSee the [code](https://github.com/cblgh/plain), or grab a [build](https://github.com/cblgh/plain/releases/).\n\n## Usage\nTypical use: \n\n```\nplain --generate-previews --url https://cblgh.org; cp -r web/* /path/to/my/webroot   \n```\n\nUse the help flag to see all options:\n\n```\nplain -h\n  -css string\n        css stylesheet to copy into webdir (default \"./style.css\")\n  -generate-previews\n        generate experimental open-graph image previews\n  -out string\n        output path containing the assembled html (default \"./web\")\n  -url string\n        the canonical url of the hosted site; used primarily to generate rss feeds\n  -v    toggle messages when running\n```\n\n## Features\n\n* Generate [rss](https://en.wikipedia.org/wiki/RSS) for any number of listicles\n* Convert markdown into html\n* Copy directories into the webroot\n* Bundles all files needed into a single executable\n* Mod it: customize the command names by editing the `symbols` file\n* Separate your files from your publishing; plain eschews [front matter](https://gohugo.io/content-management/front-matter/)\n\n## Concepts\n\n* The index file (think of it like a sitemap of sorts, or as a root listicle)\n* Listicles (lists of articles, defined by commands and operands)\n* Commands: symbols + operand (single, not plural)\n* Navigation\n* Directory copying\n* Markdown first\n\nFor an example of how to construct a plain website, see the `/example` folder—or [cblgh.org](https://cblgh.org), for the deployed equivalent.\n\n## Commands\n```\ntt  TITLE            title\nbb  BRIEF            a one-line brief markdown description\nmd  PATH_MD          path to markdown file containing a standalone article / page\nln  LINK             link to resource representing the described item\nww  PATH_WWWROOT     set the final destination path in plain's webroot\ncf  PATH_SSG         path to a listicle file containing ssg input (e.g. articles)\ncp  COPY_DIR         copy an entire directory to the web root, preserving the folder name\nnn  NAVIGATION_TITLE name navigation item \u0026 add to the main nav\nmv  REDIRECT         redirect the given url (by dumping a redirect page) to the current item\ncc  CREATE_RSS       create rss feed for listicle\n//  SKIP             comment, skip parsing this line\n``` \n\nMake plain your own by changing the command names (e.g. renaming `cc` -\u003e `rss`) by editing the `symbols` file. The only\nrestriction is that the new command name may contain no spaces.\n\n\nCurrently some commands are only suitable for the index file, and some only for listicles.\n\n```\nlisticle only\n    none! :)\nindex only\n    cf  PATH_SSG         path to a listicle file containing ssg input (e.g. articles) \n    cc  CREATE_RSS       create rss feed for listicle \n    nn  NAVIGATION_TITLE name navigation item \u0026 add to the main nav\nboth listicle \u0026 index\n    tt  TITLE            title\n    bb  BRIEF            a one-line brief markdown description\n    md  PATH_MD          path to markdown file containing a standalone article / page\n    ln  LINK             link to resource representing the described item\n    ww  PATH_WWWROOT     set the final destination path in plain's webroot\n    //  SKIP             comment, skip parsing this line\n    cp  COPY_DIR         copy an entire directory to the web root, preserving the folder name \n    mv  REDIRECT         redirect the given url (by dumping a redirect page) to the current item\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcblgh%2Fplain","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcblgh%2Fplain","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcblgh%2Fplain/lists"}