{"id":22004173,"url":"https://github.com/electric-eloquence/fepper-npm","last_synced_at":"2026-02-17T13:02:29.575Z","repository":{"id":37458115,"uuid":"76857413","full_name":"electric-eloquence/fepper-npm","owner":"electric-eloquence","description":"The NPM that powers Fepper","archived":false,"fork":false,"pushed_at":"2025-03-15T14:08:02.000Z","size":13487,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"dev","last_synced_at":"2025-09-19T13:22:41.190Z","etag":null,"topics":["fepper"],"latest_commit_sha":null,"homepage":"https://fepper.io/","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/electric-eloquence.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":"2016-12-19T11:44:18.000Z","updated_at":"2024-06-08T10:28:48.000Z","dependencies_parsed_at":"2024-06-21T17:54:14.717Z","dependency_job_id":"ff5f309e-6088-4f62-ad71-f3c76486a9ff","html_url":"https://github.com/electric-eloquence/fepper-npm","commit_stats":{"total_commits":1306,"total_committers":6,"mean_commits":"217.66666666666666","dds":"0.15849923430321589","last_synced_commit":"bec4efdac94788e9ad3ef95b82e4d78924b0c838"},"previous_names":[],"tags_count":129,"template":false,"template_full_name":null,"purl":"pkg:github/electric-eloquence/fepper-npm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electric-eloquence%2Ffepper-npm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electric-eloquence%2Ffepper-npm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electric-eloquence%2Ffepper-npm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electric-eloquence%2Ffepper-npm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/electric-eloquence","download_url":"https://codeload.github.com/electric-eloquence/fepper-npm/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/electric-eloquence%2Ffepper-npm/sbom","scorecard":{"id":371822,"data":{"date":"2025-08-11","repo":{"name":"github.com/electric-eloquence/fepper-npm","commit":"f8af47ad12f4f385d73a224c3deb720290782fb1"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"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":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","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/30 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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/linux-ci.yml:1","Warn: no topLevel permission defined: .github/workflows/mac-ci.yml:1","Warn: no topLevel permission defined: .github/workflows/windows-ci.yml:1","Info: no jobLevel write permissions found"],"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":"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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"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":"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":"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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"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":"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/linux-ci.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/electric-eloquence/fepper-npm/linux-ci.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/linux-ci.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/electric-eloquence/fepper-npm/linux-ci.yml/dev?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/linux-ci.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/electric-eloquence/fepper-npm/linux-ci.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/mac-ci.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/electric-eloquence/fepper-npm/mac-ci.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/mac-ci.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/electric-eloquence/fepper-npm/mac-ci.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/windows-ci.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/electric-eloquence/fepper-npm/windows-ci.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/windows-ci.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/electric-eloquence/fepper-npm/windows-ci.yml/dev?enable=pin","Warn: npmCommand not pinned by hash: .github/workflows/linux-ci.yml:31","Warn: npmCommand not pinned by hash: .github/workflows/mac-ci.yml:31","Info:   0 out of   6 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   2 npmCommand dependencies pinned"],"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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'dev'"],"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"}}]},"last_synced_at":"2025-08-18T13:09:44.917Z","repository_id":37458115,"created_at":"2025-08-18T13:09:44.924Z","updated_at":"2025-08-18T13:09:44.924Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29545295,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T13:00:00.370Z","status":"ssl_error","status_checked_at":"2026-02-17T12:57:14.072Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["fepper"],"created_at":"2024-11-30T00:12:28.696Z","updated_at":"2026-02-17T13:02:29.554Z","avatar_url":"https://github.com/electric-eloquence.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg\n    src=\"https://raw.githubusercontent.com/electric-eloquence/fepper-npm/master/excludes/fepper-branding.png\"\n    alt=\"Fepper\"\n  \u003e\n\u003c/p\u003e\n\n\u003ch2 align=\"center\"\u003eA frontend prototyper tool for rapid prototyping of websites\u003c/h2\u003e\n\n[![Known Vulnerabilities][snyk-image]][snyk-url]\n[![Linux Build Status][linux-image]][linux-url]\n[![Mac Build Status][mac-image]][mac-url]\n[![Windows Build Status][windows-image]][windows-url]\n[![Coverage Status][coveralls-image]][coveralls-url]\n![Node Version][node-version-image]\n[![License][license-image]][license-url]\n\n### This is the npm that powers these Fepper prototypers:\n\n* [Fepper Main](https://github.com/electric-eloquence/fepper) - main distribution.\n* [Fepper Base](https://github.com/electric-eloquence/fepper-base) - no \n  unnecessary assets, styles, demo website, or \n  \u003ca href=\"https://www.npmjs.com/package/fp-stylus\" target=\"_blank\"\u003efp-stylus\u003c/a\u003e \n  extension.\n* [Fepper for Drupal](https://github.com/electric-eloquence/fepper-drupal) - \n  templates configured for Drupal, along with a Drupal theme built to \n  accommodate those templates.\n* [Fepper for Wordpress](https://github.com/electric-eloquence/fepper-wordpress) - \n  templates configured for WordPress, along with a WordPress theme built to \n  accommodate those templates.\n\nPlease consult any of the above links for documentation on getting started and \non power-usage of Fepper.\n\n### \u003ca id=\"under-the-hood\"\u003e\u003c/a\u003eUnder the Hood\n\n#### Minimum supported Node.js version 18.0.0\n\nTo just run a Node.js implementation of Pattern Lab, instantiate a `patternlab` \nobject as follows:\n\n```javascript\nconst config = require('./patternlab-config.json');\nconst cwd = process.cwd();\nconst Patternlab = require('fepper/ui/core/lib/patternlab');\nconst patternlab = new Patternlab(config, cwd);\n```\n\nFepper's `Patternlab` constructor recognizes a second argument (current working \ndirectory) for instantiating a `patternlab` object. This allows it to be \ninstantiated from any directory within any task runner or custom application.\n\nFepper exposes these methods on the `patternlab` object:\n\n* build: function (options)\n* compile: function (options)\n* resetConfig: function (config)\n\nThe `options` argument is optional. If submitted, it must be an object whose \nproperties are intended to override one or more properties in the `config` \nobject consumed by the `Patternlab` constructor.\n\nKeep in mind that configs overridden by an `options` argument will persist \nthrough all future operations on that `Patternlab` instance. In order to revert \nthe configs back to the original configs, call `resetConfig` with the original \nconfigs. `resetConfig` will reset any number of properties submitted but will \nnot delete any preexisting properties.\n\nFepper is 100% compatible with Pattern Lab PHP Mustache code. It aims to \nmaintain parity with the PHP distribution with respect to \n\u003ca href=\"https://github.com/electric-eloquence/feplet-vs-patternlab-php\" target=\"_blank\"\u003e\nperformance and core features\u003c/a\u003e.\n\n### \u003ca id=\"upfront-and-onscreen\"\u003e\u003c/a\u003eUpfront and Onscreen\n\nUsing this npm decoupled from a full Fepper project requires compiling the UI by \nrunning this line of Node.js:\n\n```javascript\npatternlab.compile();\n```\n\nThe word \"compile\" takes on a special meaning in Fepper, referring to assembling \n\"components\" into a whole. \"Build\" refers to outputting patterns to be displayed \nby the UI.\n\nAll aspects of the UI are available for customization. For example, the toolbar \ncan accept additions, modifications, and deletions per the needs of end-users. \nThe UI markup is compiled by recursive, functional React calls. The recursion \ntree is reflected by the directory structure containing the modules which \ncompose the UI. To override any given module, copy the directory structure \nleading to the module from \n\u003ca href=\"https://github.com/electric-eloquence/fepper-npm/tree/dev/ui/core/styleguide/index/html\" target=\"_blank\"\u003e\nhttps\u0026colon;//github.com/electric-eloquence/fepper-npm/tree/dev/ui/core/styleguide/index/html\u003c/a\u003e \nto `source/_ui/index/html`, respective to your implementation. Modifications to \nmodules in that directory will override the corresponding modules in core. \nAdditions (so long as they are correctly nested) will also be recognized.\n\nA working example of UI customization can be found at \n\u003ca href=\"https://github.com/electric-eloquence/fepper-drupal/blob/dev/source/_ui/index/html/00-head/head.component.js\" target=\"_blank\"\u003e\nhttps\u0026colon;//github.com/electric-eloquence/fepper-drupal/blob/dev/source/_ui/index/html/00-head/head.component.js\u003c/a\u003e. \nThe Fepper for Drupal project overrides its HTML title to read \"Fepper for \nDrupal\" instead of \"Fepper\". In order to do so, it has the `head.component.js` \nmodule nested in directories that correspond to the tags that nest the `head` \nHTML element. Both `head.component.js` and its nesting directories must be named \nsimilarly to their corresponding elements. `.component.js` indicates that the \nfile is a module to be rendered by React. It must export \n\u003ca href=\"https://react.dev/reference/react-dom/components/common\" target=\"_blank\"\u003e\nan object of props\u003c/a\u003e consumable as \n\u003ca href=\"https://react.dev/reference/react/createElement\" target=\"_blank\"\u003e\nthe second parameter to `React.createElement()`\u003c/a\u003e. \nThe numeric prefix to `00-head` orders it to precede `01-body`, even though \n\"body\" precedes \"head\" alphabetically.\n\nIn this example, by allowing customizations in the `00-head` directory separate \nfrom the core components, core updates will be respected for all components \nexcept for the HTML head.\n\nBrowser JavaScript and CSS customizations can (and should) be componentized \nthis way as well. While a head element is unlikely to have associated scripts or \nstyles, the UI's main element does have its scripts and styles componentized as \n\u003ca href=\"https://github.com/electric-eloquence/fepper-npm/tree/dev/ui/core/styleguide/index/html/01-body/40-main\" target=\"_blank\"\u003e\n`main.js` and `main.css` in `index/html/01-body/40-main`\u003c/a\u003e. A big advantage \nfor this type of componentization comes when elements are renamed or deleted. \nWhen you rename or delete an element, are you _absolutely_ sure you'll rename \nor delete accordingly in some far-flung, monolithic script or style file?\n\nAlas, no one should be _forced_ to componentize this way. Generic modifications \nto UI scripts can be added to `source/_scripts/ui-extender.js`.\n\nSimilarly, generic modifications to UI CSS can be added to \n`source/_styles/pattern-scaffolding.css`. (The file is named this way to adhere \nto \u003ca href=\"https://patternlab.io/docs/using-pattern-states/#heading-adding-customized-states\" target=\"_blank\"\u003e\nthe Pattern Lab documentation on custom pattern states\u003c/a\u003e. It should not be relied on \nfor pattern scaffolding.)\n\nView All markup can also be overridden by copying the .mustache files in \n\u003ca href=\"https://github.com/electric-eloquence/fepper-npm/tree/dev/ui/core/styleguide/viewall\" target=\"_blank\"\u003e\nhttps\u0026colon;//github.com/electric-eloquence/fepper-npm/tree/dev/ui/core/styleguide/viewall\u003c/a\u003e \nand pasting them to `source/_ui/viewall` (nested correctly). Modifications will \nthen be recognized and displayed in the UI. (No additions are allowed.) Custom \nView All styles can be added to `source/_styles/pattern-scaffolding.css`.\n\nYou will need to compile the UI in order for the browser to pick up custom \nchanges to the UI. Within a full Fepper project, this can be accomplished with \nthe following command:\n\n```shell\nfp ui:compile\n```\n\nNew UI customizations will not be picked up simply by restarting Fepper.\n\n###  \u003ca id=\"just-the-fepper-instance\"\u003e\u003c/a\u003eJust the Fepper Instance\n\nWhile it is recommended that you use Fepper with the \n\u003ca href=\"https://www.npmjs.com/package/fepper-cli\" target=\"_blank\"\u003eFepper CLI\u003c/a\u003e, \nand its `fp` command, you can alternatively instantiate a barebones Fepper \ninstance:\n\n```javascript\nconst cwd = process.cwd();\nconst Fepper = require('fepper');\nconst fepper = new Fepper(cwd);\n```\n\n`cwd` must contain `conf.yml`, `patternlab-config.json`, `pref.yml`, and the \n`source` and `public` directories.\n\nThere is currently no public API for object-oriented Fepper. To express demand \nfor one, \n\u003ca href=\"https://github.com/electric-eloquence/fepper/issues\" target=\"_blank\"\u003e\nplease open an issue\u003c/a\u003e.\n\n[snyk-image]: https://snyk.io//test/github/electric-eloquence/fepper-npm/release/badge.svg\n[snyk-url]: https://snyk.io//test/github/electric-eloquence/fepper-npm/release\n\n[linux-image]: https://github.com/electric-eloquence/fepper-npm/workflows/Linux%20build/badge.svg?branch=release\n[linux-url]: https://github.com/electric-eloquence/fepper-npm/actions?query=workflow%3A\"Linux+build\"\n\n[mac-image]: https://github.com/electric-eloquence/fepper-npm/workflows/Mac%20build/badge.svg?branch=release\n[mac-url]: https://github.com/electric-eloquence/fepper-npm/actions?query=workflow%3A\"Mac+build\"\n\n[windows-image]: https://github.com/electric-eloquence/fepper-npm/workflows/Windows%20build/badge.svg?branch=release\n[windows-url]: https://github.com/electric-eloquence/fepper-npm/actions?query=workflow%3A\"Windows+build\"\n\n[coveralls-image]: https://img.shields.io/coveralls/electric-eloquence/fepper-npm/release.svg\n[coveralls-url]: https://coveralls.io/r/electric-eloquence/fepper-npm\n\n[node-version-image]: https://img.shields.io/node/v/fepper.svg\n\n[license-image]: https://img.shields.io/github/license/electric-eloquence/fepper-npm.svg\n[license-url]: https://raw.githubusercontent.com/electric-eloquence/fepper-npm/release/LICENSE\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felectric-eloquence%2Ffepper-npm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felectric-eloquence%2Ffepper-npm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felectric-eloquence%2Ffepper-npm/lists"}