{"id":13532412,"url":"https://github.com/amoutonbrady/solid-quill","last_synced_at":"2026-03-10T10:05:36.545Z","repository":{"id":57365932,"uuid":"334438181","full_name":"amoutonbrady/solid-quill","owner":"amoutonbrady","description":"The Quill rich-text editor as a Solid component.","archived":false,"fork":false,"pushed_at":"2024-11-17T00:16:14.000Z","size":86,"stargazers_count":28,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-27T08:58:34.308Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/amoutonbrady.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}},"created_at":"2021-01-30T14:56:34.000Z","updated_at":"2025-05-31T21:37:20.000Z","dependencies_parsed_at":"2025-04-06T16:33:24.660Z","dependency_job_id":"525f3ea9-6f32-40b4-acfc-b84b2d6db5b5","html_url":"https://github.com/amoutonbrady/solid-quill","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/amoutonbrady/solid-quill","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amoutonbrady%2Fsolid-quill","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amoutonbrady%2Fsolid-quill/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amoutonbrady%2Fsolid-quill/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amoutonbrady%2Fsolid-quill/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/amoutonbrady","download_url":"https://codeload.github.com/amoutonbrady/solid-quill/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amoutonbrady%2Fsolid-quill/sbom","scorecard":{"id":190382,"data":{"date":"2025-08-11","repo":{"name":"github.com/amoutonbrady/solid-quill","commit":"70ca78c2721e561d13b95a00c0c20ba87ca44692"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.3,"checks":[{"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":"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 1/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":"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":"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":"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":"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":"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":"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":"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":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"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 2 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":"10 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67mh-4wv8-2f99","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-3qxh-p7jc-5xh6","Warn: Project is vulnerable to: GHSA-vg6x-rcgg-rjx6","Warn: Project is vulnerable to: GHSA-x574-m823-4x7w","Warn: Project is vulnerable to: GHSA-4r4m-qw57-chr8","Warn: Project is vulnerable to: GHSA-xcj6-pq6g-qj4x","Warn: Project is vulnerable to: GHSA-356w-63v5-8wf4","Warn: Project is vulnerable to: GHSA-859w-5945-r5v3"],"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-16T20:33:20.633Z","repository_id":57365932,"created_at":"2025-08-16T20:33:20.633Z","updated_at":"2025-08-16T20:33:20.633Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30329698,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T05:25:20.737Z","status":"ssl_error","status_checked_at":"2026-03-10T05:25:17.430Z","response_time":106,"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":[],"created_at":"2024-08-01T07:01:10.788Z","updated_at":"2026-03-10T10:05:31.532Z","avatar_url":"https://github.com/amoutonbrady.png","language":"TypeScript","funding_links":[],"categories":["📦 Components \u0026 Libraries"],"sub_categories":["Form"],"readme":"# solid-quill\n\nA [quilljs](https://quilljs.com/) wrapper for [Solid](https://github.com/ryansolid/solid).\nThis package is pretty new and probably incomplete in some way.\n\n**PR \u0026 issues are much welcomed to help me fill in the missing pieces**\n\n## Installation\n\nThis package has two peer-dependencies, [quill](http://npmjs.com/package/quill) and [solid-js](http://npmjs.com/package/solid-js)\n\n```bash\n# npm\n$ npm install solid-quill solid-js quill\n\n# pnpm\n$ pnpm add solid-quill solid-js quill\n\n# yarn\n$ yarn add solid-quill solid-js quill\n```\n\n## Usage\n\nThis package leaves the whole state management to quill internals and therefore doesn't (yet at least) provide a way to do a controlled editor out of the box. The reason behind that decision is that while researching and playing myself with other editor (namely codemirror), I found that trying to get in the way to impose a controlled flow generally results in a Frankenstein of a package.\n\nInitially, I would like to avoid being put in that situation and delegating to quill everything state related. You are provided with the quill instance and can do whatever you'd do with vanilla quill. This is just a wrapper meant to help integration within a solid application.\n\n### Example usage\n\n```tsx\nconst App: Component = () =\u003e {\n  let q: Quill;\n\n  onMount(() =\u003e {\n    console.log(q);\n    // log: undefined\n    // This is because the `SolidQuill` component also needs to wait for\n    // the element to be mounted to the dom bubbling the reference\n    // upward to the parent component.\n  });\n\n  const init = (quill: Quill) =\u003e {\n    console.assert(q.getText() === quill.getText());\n  };\n\n  return (\n    \u003cSolidQuill\n      // Bind the `Quill` instance to the parent\n      ref={q}\n      // Which element to create (default to `div`)\n      as=\"main\"\n      // Events\n      onReady={init}\n      onTextChange={console.log}\n      onSelectionChange={console.log}\n      onEditorChange={console.log}\n      // Quill options\n      debug={false}\n      modules={} // see defaults below\n      formats={} // see defaults below\n      placeholder=\"\"\n      readOnly={false} // for now this is the only reactive props\n      theme=\"snow\"\n      bounds={}\n      scrollingContainer={}\n      strict={}\n      // All other props will be attached to the rendered\n      // dom element, so you can add classes, styles, w/e\n      class=\"quill\"\n      style=\"transform: rotate(90deg)\"\n      classList={{ active: true }}\n    /\u003e\n  );\n};\n```\n\n### Listen to text change\n\n```tsx\nimport Quill from \"quill\";\nimport { SolidQuill } from \"solid-quill\";\n\nfunction App() {\n  let quill: Quill;\n  return (\n    \u003cSolidQuill ref={quill} onTextChange={() =\u003e console.log(quill.getText())} /\u003e\n  );\n}\n```\n\n## Default values\n\n```tsx\nconst defaultValues: QuillOptionsStatic = {\n  theme: \"snow\",\n\n  formats: [\n    \"bold\",\n    \"italic\",\n    \"underline\",\n    \"strike\",\n    \"align\",\n    \"list\",\n    \"indent\",\n    \"size\",\n    \"header\",\n    \"link\",\n    \"image\",\n    \"video\",\n    \"color\",\n    \"background\",\n    \"clean\",\n  ],\n\n  modules: {\n    toolbar: [\n      [\"bold\", \"italic\", \"underline\", \"strike\"],\n      [{ align: [] }],\n\n      [{ list: \"ordered\" }, { list: \"bullet\" }],\n      [{ indent: \"-1\" }, { indent: \"+1\" }],\n\n      [{ size: [\"small\", false, \"large\", \"huge\"] }],\n      [{ header: [1, 2, 3, 4, 5, 6, false] }],\n      [\"link\", \"image\", \"video\"],\n      [{ color: [] }, { background: [] }],\n\n      [\"clean\"],\n    ],\n    clipboard: {\n      matchVisual: false,\n    },\n  },\n};\n```\n\n## Contribute\n\n1. Clone the project\n2. `pnpm install` (you can install it via `npm i -g pnpm`)\n3. You can use `pnpm dev` to start a local server and hack your wait around\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famoutonbrady%2Fsolid-quill","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famoutonbrady%2Fsolid-quill","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famoutonbrady%2Fsolid-quill/lists"}