{"id":20743084,"url":"https://github.com/aimingoo/monster","last_synced_at":"2025-07-22T10:37:55.405Z","repository":{"id":89039391,"uuid":"103878051","full_name":"aimingoo/monster","owner":"aimingoo","description":"Full or incremental static site generator for Ghost.","archived":false,"fork":false,"pushed_at":"2018-08-30T09:35:33.000Z","size":29,"stargazers_count":12,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-24T05:17:12.282Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Shell","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/aimingoo.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,"zenodo":null}},"created_at":"2017-09-18T01:47:22.000Z","updated_at":"2023-02-16T03:01:28.000Z","dependencies_parsed_at":"2023-03-04T18:00:19.091Z","dependency_job_id":null,"html_url":"https://github.com/aimingoo/monster","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/aimingoo/monster","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aimingoo%2Fmonster","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aimingoo%2Fmonster/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aimingoo%2Fmonster/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aimingoo%2Fmonster/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aimingoo","download_url":"https://codeload.github.com/aimingoo/monster/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aimingoo%2Fmonster/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266477152,"owners_count":23935390,"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-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"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":[],"created_at":"2024-11-17T07:09:02.126Z","updated_at":"2025-07-22T10:37:55.394Z","avatar_url":"https://github.com/aimingoo.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Monster\n\nFull or incremental static site generator for Ghost.\n\n\nTable of Contents\n=================\n\n* [Monster](#monster)\n* [Features](#features)\n* [Install](#install)\n* [Usage](#usage)\n* [Quick Help](#quick-help)\n* [Performance](#performance)\n* [Manual](#manual)\n    * [Base command format](#base-command-format)\n    * [Fast commands](#fast-commands)\n    * [Paraments for generate mode](#paraments-for-generate-mode)\n    * [Paraments for update mode](#paraments-for-update-mode)\n    * [Paraments for preview mode](#paraments-for-preview-mode)\n    * [Configuration items in \\.monster](#configuration-items-in-monster)\n    * [About configuration file \\.sqlitedb](#about-configuration-file-sqlitedb)\n* [History](#history)\n\n\n\n# Features\n\n- Full static site generator for Ghost and other blog or sites\n- Incremental generator for new or updated blogs on Ghost\n- Preview at localhost with static files\n- Support GitHub Pages(host on github.io), and standalone domain\n- Integration git deploy on github.io or your standalone domain\n- Single client, multi site alone configuration\n- Support simplify url(very short slug as title) for Ghost\n- Compatible Ghost 0.9x to 1.x, and support multi-author for Ghost\n- Some expert features for git-comments(use github issues as blog comments, ex: gitment)\n\n\n# Install\n\n```bash\n\u003e brew install aimingoo/repo/monster\n\n# OR, manual install with git\n\u003e git clone https://github.com/aimingoo/monster\n\u003e ln -s \"$(pwd)/monster/libexec/monster.sh\" /usr/local/bin/monster\n\u003e chmod +x /usr/local/bin/monster\n```\n\n# Usage\n\n**Init work directory**\n\n```bash\n# Pull your xxxx.github.io\n\u003e git clone https://github.com/xxxx/xxxx.github.io\n...\n\n# Initialization as work directory\n\u003e cd xxxx.github.io\n\u003e monster --init\nYour Github name or domain : xxxx\n...\n```\n\n**Generate full site**\n\n```bash\n# Launch your Ghost site first(default on localhost:2368), and\n\u003e monster --generate\n```\n\n**Preview the ./static directory**\n\n```bash\n\u003e monster preview\nServing HTTP on 0.0.0.0 port 8000 ...\n```\n\n\n**Deploy to xxxx.github.io**\n\n\n```bash\n\u003e monster --deploy-now\n```\n\n\n**Incremental update**\n\n```bash\n# generate incremental files only\n\u003e monster update\n\n# OR, update and deploy\n\u003e monster update --deploy-now\n```\n\n**Deploy incremental files**\n\n```bash\n# execute 'monster update' first, and\n\u003e monster update --deploy-only\n```\n\n\n\n# Quick Help\n\nNormal help information:\n\n```bash\n\u003e monster --help\n```\n\nMore:\n\n```bash\n\u003e monster generate --help\n\n# and\n\u003e monster update --help\n```\n\n# Performance\n\nThe test environment run at macbook pro 15-inch, 2.5 GHz Intel Core i7, 16 GB 1600 MHz DDR3, with Ghost localhost blog.\n\nInclude 292 posts and some attachments and assets in this blog site, full site include 628 files(with 444 html pages), and total 87.1MB.\n\nCase one, full site generator in `generator` mode:\n\n```bash\n\u003e time monster generate --generate --reset-domain --short-path\n...\n[283/292] Process ./static/1-99.htmlll\nDone.\n\nreal\t1m39.333s\nuser\t0m58.739s\nsys\t0m17.515s\n```\n\nCase two, full site generator in `update` mode, double time compared to generate mode:\n\n```bash\n\u003e time monster update\n...\nreal\t3m34.757s\nuser\t1m37.506s\nsys\t0m59.065s\n```\n\nCase three, in `update` mode with one post updated. Bingo! 2s to donwload 49 files and refresh 3 files only:\n\n```bash\n\u003e time monster update \u0026\u0026 find ./static -type f | echo -e \"\\nNew files: `wc -l`\"\nPick updated or new files ...\n\u003e Downloaded: 49 files, 2.8M in 0.02s (153 MB/s)                           \n...\n\nreal\t0m1.881s\nuser\t0m1.045s\nsys\t0m0.522s\n\nNew files:       3\n```\n\nCase four, in `update` mode with one post created. will refresh index/tag/profile pages, total 74 files:\n\n```bash\n\u003e time monster update \u0026\u0026 find ./static -type f | echo -e \"\\nNew files: `wc -l`\"\n...\n\nreal\t0m16.052s\nuser\t0m9.005s\nsys\t0m1.515s\n\nNew files:       74\n```\n\n\n\n# Manual\n\n### Base command format\n\n```bash\n\u003e monster \u003cmode\u003e [paraments]\n```\n\nDefault mode is `generate`.\n\n### Fast commands\n\nCan fast execute some commands for `update` mode only. Include:\n\n```bash\n## monster update --search \"key\"\n\u003e monster search \"key\"\n\n## monster update --list \u003cunment\u003e||\u003cuser\u003e\n\u003e monster list user\n\u003e monster list unment\n```\n\n### Paraments for `generate` mode\n\n```bash\n#\n# Switch paraments\n#\tex: --paramName=true/false\n# use --paramName will set to 'true'\n#\n\n## Four main steps\n# - GENERATE: full site generate\n--generate\n# - RESET_DOMAIN: reset DOMAIN in static pages, default is true\n--reset-domain\n# - SHORT_PATH: shortening path in url in static pages\n--short-path\n# - DEPLOY_NOW: deploy with Git client\n--deploy-now\n\n## Processes before 'RESET_DOMAIN' step\n# - enable pick file sitemap file /sitemap-*\n--pick-sitemap\n# - enable remove '?xxxxx' postfix of filename in static directory\n--patch-version\n\n## Processes before 'DEPLOY_NOW' step\n# - enable check DOMIAN replaced in pages in static directory before deploy\n--check-static\n\n## enable show more information in GENERATE step of 'generate' mode\n--generate-info\n\n#\n# String paraments\n#\n\n## Github domain or 3rd domain without protocol\n--domain=\"...\"\n\n## Ghost site or general address, will pull offline files\n--site=\"http://...\"\n\n## Default directory of static files\n--static-path=\"...\"\n\n#\n# Other paraments\n#\n\n## Show help\n--help\n\n## Show version\n--version\n```\n\n\n### Paraments for `update` mode\n\n```bash\n#\n# Switch paraments\n#\tex: --paramName=true/false\n# use --paramName will set to 'true'\n#\n\n\n## In Fetch and Deploy processing\n# - RESET_DOMAIN: reset DOMAIN in static pages, default is true\n--reset-domain\n# - SHORT_PATH: shortening path in url in static pages, default is true\n--short-path\n# - DEPLOY_NOW: deploy with Git client\n--deploy-now\n# - try refresh index pages for remove posts in Fetch processing\n--sync-removed\n# - deploy only, skip Fetch processing\n--deploy-only\n\n## Try pick files\n# - enable pick file /tag-cloud\n--pick-static-tagcloud\n# - enable pick file /profile-xxx\n--pick-static-profile\n# - enable pick file /archive-post\n--pick-archive-post\n# - enable pick file /robot.txt\n--pick-robot-txt\n# - enable pick file sitemap file /sitemap-*\n--pick-sitemap\n# - force try PICK_xxxx options\n--force\n\n\n#\n# String paraments\n#\n\n## Github domain or 3rd domain without protocol\n--domain=\"...\"\n\n## Ghost site or general address, will pull offline files\n--site=\"http://...\"\n\n## Default directory of static files\n--static-path=\"...\"\n\n#- write url with the protocol as issue body when use '--sync-issue', default is 'https'\n--protocol=\"...\"\n\n## path of sqlite .db file for Ghost blog on localhost\n--db=\"...\"\n\n## login account for Ghost blog on localhost\n# (please use 'monster --list user' to view a list)\n--email=\"...\"\n```\n\nAnd you can use some direct commands in `update` mode:\n```bash\n#\n# direct commands\n#\n\n## generate .sqlitedb to align data from current .db file\n# - 'checksums' is internal parament only\n--init [checksums]\n\n## update to 'authorId-postId' format for all slugs of post\n# - direct generate short-path for all posts\n# - call me before 'monster update'\n--sync-slug\n\n## generate issues for all posts in github repo of current git pages\n# - for Gitment only\n# - write issue with two tags: '${slug}' and 'gitment'\n# - check issue exist, no duplicate\n--sync-issue\n\n## list un-comment's post, or user, or more...\n# - unment: un-comment's posts, for gitment only\n# - user: users for Ghost blog on localhost\n--list \u003cunment|user\u003e]\n\n## search the \u003ckey\u003e in content of posts\n--search \u003ckey\u003e\n\n## Show help\n--help\n\n## Show version\n--version\n```\n\n### Paraments for `preview` mode\n```bash\n## one PORT parament only, ex:\n# - default is 8000\n\u003e monster preview [port]\n```\n\n\n### Configuration items in `.monster`\n\n```bash\n## Github domain or 3rd domain without protocol, ex:\n#\t- \"xxxx.github.io\", Or \"www.yoursite.com\"\n#\t- prefix \"xxxx\" only when input from console by command 'monster update --init'\nDOMAIN=\"...\"\n\n\n## Ghost .db file path\n#\t- 'update' mode depend\nDB=\"/User/...\"\n\n\n## Ghost site or general address, will pull offline files\n# - default is \"http://localhost:2368\"\nSITE=\"http://...\"\n\n\n## Github account, and rate of api access\n# - Your github account name, ex: \"xxxx\" of 'xxxx.github.io'\nGITHUB_USER=\"Your name\"\n# - Access token from your github management page\nGITHUB_TOKEN=\"Access token\"\n# - limited rate, seconds of github api calls, default 1 of one call per second\nGITHUB_APIRATE=1\n# - limited page size of read github list, default 100 items per page\nGITHUB_PAGESIZE=100\n\n\n## Other\n# - login account in local ghost\n# - (it's a string, or bash format array of string)\nEMAIL=\"...\"\n# - protocol for 'DOMAIN', require when support Gitment and non git pages\nPROTOCOL=\"https\"\n\n\n## Advertisement token string when your site supported \n# - a token for advertisenment\nAD_TOKEN=\"\"\n# - enumerate files for advertisenment token\nAD_FILES=(\"shared/ghost-url.js\" \"public/ghost-sdk.js\")\n\n\n## Default directory of static files\nSTATIC_PATH=\"./static\"\n\n\n## Default behavior\n# - enable show more information in GENERATE step of 'generate' mode\nGENERATE_INFO=false\n# - enable force sync removed posts in index or list pages of 'update' mode\nSYNC_REMOVED=false\n# - enable remove '?xxxxx' postfix of filename in static directory\nPATCH_VERSION=true\n# - enable RESET_DOMAIN step\nRESET_DOMAIN=true\n# - enable SHORT_PATH step\nSHORT_PATH=false\n# - enable check DOMIAN replaced in pages in static directory before deploy\nCHECK_STATIC=true\n\n\n## Pick more files\n# - enable pick file /tag-cloud\nPICK_STATIC_TAGCLOUD=false\n# - enable pick file /profile-xxx\nPICK_STATIC_PROFILE=false\n# - enable pick file /archive-post\nPICK_ARCHIVES_POST=false\n# - enable pick file /robots.txt\nPICK_ROBOTS_TXT=true\n# - enable pick file sitemap file /sitemap-*\nPICK_SITEMAP=true\n# - force try PICK_xxxx options in 'update' mode\nFORCE=false\n\n\n## Other override\n# - ignore directories in SHORT_PATH step\nIGNORE_LIST=(\"author\" \"page\" \"rss\" \"tag\" \"assets\" \"content\")\n# - accept directories of static file when pick post pages in 'update' mode\nACCEPT_LIST=(\"assets\" \"content\" \"rss\" \"shared\" \"public\")\n# - process directories in PATCH_VERSION step\nVERDIR_LIST=(\"assets\" \"shared\" \"public\")\n# - force update pages in 'update' mode when '--force' enabled\nFORCEPAGE_LIST=()\n# - name forced for paged post\nFORCEINDEX_LIST=(\"about\" \"archives-post\")\n```\n### About configuration file `.sqlitedb`\n\nThe `.sqlitedb` include database database last `update`. next command to align current database:\n\n```bash\n\u003e monster update --init\n```\n\nThe file will update when execute `monster update` with `--deploy-now` or `--deploy-only`。\n\nIf the file lost or removed, then `monster update` command would fetch all posts, and you can make/rewrite it by `monster update --init` anytime.\n\n# History\n\n```\n2018.08.30\tv1.0.8 released, Update for homebrew repo\n2017.10.16\tv1.0.7 released, Support list long userId\n2017.10.15\tv1.0.6 released, Ghost 1.x and multi-author supported\n2017.10.08\tv1.0.5 released, kick off buster, and add fast commands\n2017.09.24\thotfix for GNU sed supported and performance test\n2017.09.23\tv1.0.4 released, GNU sed supported, and update manual\n2017.09.20\tv1.0.3 released\n2017.09.19\tv1.0.2 released, fix minor bugs\n2017.09.17\tv1.0.0 released\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faimingoo%2Fmonster","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faimingoo%2Fmonster","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faimingoo%2Fmonster/lists"}