{"id":28512935,"url":"https://github.com/baskerville/stoic","last_synced_at":"2025-07-21T09:32:14.139Z","repository":{"id":5557625,"uuid":"6762328","full_name":"baskerville/stoic","owner":"baskerville","description":"Tiny static site generator","archived":false,"fork":false,"pushed_at":"2015-06-13T06:05:23.000Z","size":168,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-04T05:37:16.979Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/baskerville.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-11-19T15:18:22.000Z","updated_at":"2020-03-17T22:59:37.000Z","dependencies_parsed_at":"2022-07-07T02:00:45.545Z","dependency_job_id":null,"html_url":"https://github.com/baskerville/stoic","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/baskerville/stoic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baskerville%2Fstoic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baskerville%2Fstoic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baskerville%2Fstoic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baskerville%2Fstoic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/baskerville","download_url":"https://codeload.github.com/baskerville/stoic/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baskerville%2Fstoic/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266276025,"owners_count":23903969,"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","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":"2025-06-09T01:05:29.504Z","updated_at":"2025-07-21T09:32:14.133Z","avatar_url":"https://github.com/baskerville.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![logo](https://github.com/baskerville/stoic/raw/master/logo/stoic-logo.png)\n\n## Usage\n\n    SYNOPSIS\n        stoic [OPTIONS]\n\n    OPTIONS\n        -h, --help\n            Show this help message.\n\n        -c, --copy-mode\n            Copy the unknown files to the output directory.\n\n        -a, --sync-assets FILE ...\n            Synchronize the given assets.\n        \n        -o, --output-dir OUTPUT_DIR\n            Set the output directory.\n\n## Description\n\n**stoic** is a tiny static site generator.\n\nIt builds a tree of items by walking in the *site directory* and render that tree in the *output directory*.\n\n## Configuration\n\nThe settings are read from `./settings.py`.\n\n## Settings\n\n- `title`: site title\n- `home`: site url\n- `site_dir`: directory to build the tree of items from\n- `output_dir`: directory to render the tree to\n- `layouts_dir`: directory to read the layouts from\n- `assets_dir`: directory in which the assets are located\n- `exclude`: list of directories not to be included in the tree\n- `items_per_page`: maximum number of items per page\n- `custom_filters`: a dictionary which will be merged to the Jinja2 environment filters\n- `default_layout`: default layout (path is relative to `layouts_dir`)\n- `source_extension`: file extension of the markdown files (default: 'md')\n- `source_index`: file name of the markdown *index* (default: 'index.md')\n- `destination_index`: file name of the output *index* (default: 'index.html')\n- `thumbnail_fmt`: format string used to generate the thumbnail path.\n\n## Details\n\n**stoic** scans `site_dir` for files having a `source_extension` extension.\n\nUnless `--copy-mode` is passed, **stoic** ignores any other files.\n\nThe output paths are computed as so:\n\n- `foo/bar.md` becomes `foo/bar/index.html`\n- `foo/index.md` becomes `foo/index.html`\n\nThe layouts will be given the following elements:\n\n- item: the node being processed, carries the following attributes:\n    - content: the html content\n    - url: the url of the item relative to `home`\n    - parent: the parent item\n    - children: the list of children\n    - prev, next (only if paginated)\n- trail: (of type *list*), the path from item to root\n- root: the root item\n- title: the site title\n- home: the site url\n\nExtra attributes are set through the YAML front matter of the markdown files.\n\nYou might want to set the `layout` attribute to indicate the layout of the related item.\n\nTo get the url of item `a` relative to item `b`, use the following: `a.relurl(b)`.\n\nPagination will occur on item `a` if `items_per_page \u003e 0`, `a.paginate` is true (and if `len(a.children) \u003e items_per_page`).\n\nThe `ignore` attribute can be used to prevent rendering on the related item.\n\n## Requirements\n\nPython 3 and the following python libraries:\n\n- Jinja2\n- Misaka\n- PyYAML\n- Beautiful Soup 4 \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbaskerville%2Fstoic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbaskerville%2Fstoic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbaskerville%2Fstoic/lists"}