{"id":17089467,"url":"https://github.com/mihaifm/smolpress","last_synced_at":"2026-02-27T10:38:44.132Z","repository":{"id":35834922,"uuid":"219603240","full_name":"mihaifm/smolpress","owner":"mihaifm","description":"Smol Website Builder","archived":false,"fork":false,"pushed_at":"2025-10-24T19:27:29.000Z","size":366,"stargazers_count":7,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-24T21:20:57.037Z","etag":null,"topics":["cms","nodejs","static-site-generator","website-builder"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mihaifm.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-11-04T21:49:48.000Z","updated_at":"2025-10-24T19:27:33.000Z","dependencies_parsed_at":"2025-04-12T22:11:13.664Z","dependency_job_id":"7be689c5-4d97-4d5e-a6d3-2cf4106a4e54","html_url":"https://github.com/mihaifm/smolpress","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/mihaifm/smolpress","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mihaifm%2Fsmolpress","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mihaifm%2Fsmolpress/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mihaifm%2Fsmolpress/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mihaifm%2Fsmolpress/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mihaifm","download_url":"https://codeload.github.com/mihaifm/smolpress/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mihaifm%2Fsmolpress/sbom","scorecard":{"id":644545,"data":{"date":"2025-08-11","repo":{"name":"github.com/mihaifm/smolpress","commit":"01fdbd5ca9c124cba0ec609cb73766ecc869ec11"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.7,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/22 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 8 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"19 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-qwcr-r2fm-qrc7","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-wm7h-9275-46v2","Warn: Project is vulnerable to: GHSA-ghr5-ch3p-vcr6","Warn: Project is vulnerable to: GHSA-rv95-896h-c2vc","Warn: Project is vulnerable to: GHSA-qw6h-vgh9-j6wx","Warn: Project is vulnerable to: GHSA-44fp-w29j-9vj5","Warn: Project is vulnerable to: GHSA-9h6g-pr28-7cqp","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-54xq-cgqr-rpm3","Warn: Project is vulnerable to: GHSA-pq67-2wwv-3xjx","Warn: Project is vulnerable to: GHSA-8cj5-5rvv-wf4v"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T11:46:50.542Z","repository_id":35834922,"created_at":"2025-08-21T11:46:50.542Z","updated_at":"2025-08-21T11:46:50.542Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29891930,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T09:48:51.284Z","status":"ssl_error","status_checked_at":"2026-02-27T09:48:43.992Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["cms","nodejs","static-site-generator","website-builder"],"created_at":"2024-10-14T13:47:24.180Z","updated_at":"2026-02-27T10:38:44.113Z","avatar_url":"https://github.com/mihaifm.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# smolpress\n\nSmolpress is a small website builder. It aims to be an alternative to the increasingly complex static site generators and content managers available today.\n\nWith smolpress you would just write your posts in markdown using the built-in online editor. The markdown content is saved on the disk and converted to html on the spot.\nNo database is required, everything is file based.    \n\nIt can be used for personal websites, blogs, quick prototypes or as a baseline for more complex sites.\n\nA node.js server is used to provide some dynamic content like comments, image upload and markdown editing.\n\n## Features\n\n* All content statically generated\n* Admin panel with authentication\n* Online markdown editor\n* Image upload with resizing and optimization\n* Support for ejs templates\n* Page metadata (front-matter)\n* Drafts\n* Default theme\n* Code highlighting\n* Simple comments system with email notifications\n* RSS feed\n* No database, everthing is file based\n\n## FAQ\n\n### How does it compare to a static site generator (SSG) ?\n\nSmolpress is also a static site generator and supports ejs templates in addition to markdown files. To statically generate the site simply start the server.\nWhile smolpress runs on a node.js server to provide some dynamic features, your posts are statically generated at all time so you can move them to a different web server if you feel the need.\n\nCompared to an SSG, smolpress provides an online markdown editor so you can edit your posts using your own website rather than using an external editor and fiddling with live-reload or deploy scripts.\n\n### How does it compare to a content management system (CMS) ?\n\nSmolpress is very similar to a CMS, in the sense that you can manage your content from an online interface. However it is smaller, much smaller than a real CMS like Wordpress.\n\nWith smolpress all posts sit nicely on the disk written in Markdown and are not deeply burried inside a database. In fact smolpress does not even require a database.\n\n## Getting started\n\n    npm install -g smolpress\n    cd blog\n    smolpress init\n    export SMOLPRESS_VAULT_PASSWORD=yourpassword\n    smolpress start\n\nIf you're running Windows replace the `export` command above with `set`.\n\nAlternate installation (that doesn't involve the global `smolpress` command):\n\n    git clone https://github.com/mihaifm/smolpress blog\n    cd blog\n    npm install\n    export SMOLPRESS_VAULT_PASSWORD=yourpassword\n    node index.js\n\nNow simply visit `localhost:3939` to view your blog and `localhost:3939/admin` to create a new post.\n\n## Usage\n\n###  Authentication\n\nSmolpress provides a single user that is created when visiting `/admin`. User data is stored in a text file (`data/vault.txt`) which is encrypted with the password available in the SMOLPRESS_VAULT_PASSWORD environment variable. User password is also hashed with sha512.\n\n### Markdown editing\n\nYou can edit any post by visiting the `/admin` panel and clicking the `Edit` link for any post. Click `Preview` to see the markdown output and `Save` to have the post converted to html.\n\n### Images\n\nImages can be uploaded via the `/media` link in the admin panel or by drag and drop in the editor. New images are stored in `source/media` and copied to `public/media` when the site in generated.\n\n### Page front matter\n\nSmolpress uses [front-matter](https://jekyllrb.com/docs/front-matter/) to add metadata to your pages. Any property name is supported and can be later used in the theme for customization.\nThe `layout`, `title` and `date` properties are supported by the default theme.\nDate format needs to be specified in the `/settings` panel. [Simple](https://day.js.org/docs/en/parse/string-format) and [advanced](https://day.js.org/docs/en/plugin/advanced-format) formats are provided by [dayjs](https://day.js.org/en/).\n\n### Comments\n\nThe comments system is simple and smol. Comments are saved as json files and converted to html when the site is generated. \nThere is no anti-spam protection but the number of comments per post and comment length are limited by config options. You can also moderate comments from the admin panel.\n\n### Themes\n\nThemes are based on [ejs](https://ejs.co/) templates and are placed in the `themes` folder. Smolpress has a default theme called `tiny`. Changing the theme can be done in the `/settings` panel.     \nIt is recommended to make a copy of the default theme and naming it to something else before making any customizations to the site. This way you won't lose any changes when updating smolpress.\n\n### RSS\n\nRSS feed is generated automatically for the entire site. RSS fields can be configured by editing `data/feedconfig.json`. This file is generated with some placeholder values when the server is first started.\n\n## Config\n\n#### Environment variables\n\n* __SMOLPRESS_VAULT_PASSWORD__ -  encryption password for the \"vault\" containing user data.\n* __SMOLPRESS_PORT__ - server port. Default: `3939`\n* __SMOLPRESS_SRC_PATH__ - path to the markdown page sources. Default: `source`\n* __SMOLPRESS_OUTPUT_PATH__ - path to the generated static files. Default: `public`\n* __SMOLPRESS_DATA_PATH__ - path to the data folder. Default: `data`\n* __SMOLPRESS_THEMES_PATH__ - path to the themes folder. Default: `themes`\n* __SMOLPRESS_KEEP_LIST__ - comma separated list of files/folders to be kept when cleaning the output folder\n\n#### Site options\n\nA smol number of options like site title and description are available in the `config.json` file (stored in the `data` folder). \nYou can edit the file manually or use the `/settings` panel of your website.\n\n## Showcase\n\n[https://mihai.fm](https://mihai.fm)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmihaifm%2Fsmolpress","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmihaifm%2Fsmolpress","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmihaifm%2Fsmolpress/lists"}