{"id":18307942,"url":"https://github.com/froala/django-froala-editor","last_synced_at":"2026-02-18T14:11:26.763Z","repository":{"id":18052576,"uuid":"21104814","full_name":"froala/django-froala-editor","owner":"froala","description":"Package to integrate Froala WYSIWYG HTML rich text editor with Django.","archived":false,"fork":false,"pushed_at":"2026-01-15T12:33:58.000Z","size":17776,"stargazers_count":291,"open_issues_count":30,"forks_count":72,"subscribers_count":11,"default_branch":"master","last_synced_at":"2026-01-15T16:49:51.701Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://froala.com/wysiwyg-editor","language":"CSS","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/froala.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2014-06-22T20:39:06.000Z","updated_at":"2026-01-15T12:19:12.000Z","dependencies_parsed_at":"2024-11-05T16:06:09.376Z","dependency_job_id":"1ca16b8f-96a5-4f15-ba83-a3f49bf4fefa","html_url":"https://github.com/froala/django-froala-editor","commit_stats":{"total_commits":228,"total_committers":23,"mean_commits":9.91304347826087,"dds":0.5526315789473684,"last_synced_commit":"8e0a5e8dc6e35c8710575326ffc313090832aae0"},"previous_names":[],"tags_count":110,"template":false,"template_full_name":null,"purl":"pkg:github/froala/django-froala-editor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/froala%2Fdjango-froala-editor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/froala%2Fdjango-froala-editor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/froala%2Fdjango-froala-editor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/froala%2Fdjango-froala-editor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/froala","download_url":"https://codeload.github.com/froala/django-froala-editor/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/froala%2Fdjango-froala-editor/sbom","scorecard":{"id":411899,"data":{"date":"2025-08-11","repo":{"name":"github.com/froala/django-froala-editor","commit":"123c63bcbbc12ffd774e2c667891af07be8e7805"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.7,"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":"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":"Maintained","score":0,"reason":"1 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":"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":"Code-Review","score":1,"reason":"Found 3/30 approved changesets -- score normalized to 1","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":"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":"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":"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":"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":"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":"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":"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 4 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"}}]},"last_synced_at":"2025-08-18T22:56:15.051Z","repository_id":18052576,"created_at":"2025-08-18T22:56:15.051Z","updated_at":"2025-08-18T22:56:15.051Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29581679,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T13:56:48.962Z","status":"ssl_error","status_checked_at":"2026-02-18T13:54:34.145Z","response_time":162,"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":[],"created_at":"2024-11-05T16:06:04.126Z","updated_at":"2026-02-18T14:11:21.755Z","avatar_url":"https://github.com/froala.png","language":"CSS","funding_links":[],"categories":["CSS"],"sub_categories":[],"readme":"# Django Froala WYSIWYG Editor\n\n\u003edjango-froala-editor package helps integrate [Froala WYSIWYG HTML editor](https://froala.com/wysiwyg-editor/) with Django.\n\n## Getting started\n\n1. Install the package:\n\n  `pip install django-froala-editor`\n\n  if not update in pypi use this\n\n  `pip install https://github.com/froala/django-froala-editor/archive/master.zip`\n\nOR\n\nAdd the directory `froala_editor` from this repo to your Python path.\n\n2. Add `froala_editor` to INSTALLED_APPS in `settings.py`.\n\n3. Add the following line to `urlpatterns` in your application's `urls.py`.\n\n```python\nfrom froala_editor import views\n```\nIn your `urlpatterns` array add \n```\npath('froala_editor/',include('froala_editor.urls'))\n```\n\nSkip this url inclusion if you don't want image and file upload inside WYSIWYG editor. Images from URLs can still be embedded.\n\n##### To add third-party plugins \nIn `froala_editor\\widgets.py` add \n```\n'froala_editor/js/third_party/embedly.min.js',\n'froala_editor/js/third_party/spell_checker.min.js',\n'froala_editor/js/third_party/font_awesome.min.js',\n'froala_editor/js/third_party/image_tui.min.js'\n```\n\n## Usage\n\n```python\nfrom django.db import models\nfrom froala_editor.fields import FroalaField\n\nclass Page(models.Model):\n  content = FroalaField()\n```\n\n`FroalaField` uses `froala_editor.widgets.FroalaEditor` as its widget. You may directly use this widget with any of your forms.py:\n\n```python\nfrom django import forms\nfrom froala_editor.widgets import FroalaEditor\n\nclass PageForm(forms.ModelForm):\n  content = forms.CharField(widget=FroalaEditor)\n```\n\n### Usage outside admin\n\nWhen used outside the Django admin, the media files are to be manually included in the template. Inside the ``\u003chead\u003e`` section or before the form is rendered, include:\n\n```python\n{{ form.media }}\n```\n\n### Usage with virtual environment\n\nTo use Froala Editor in virtual environment, see [https://tutorial.djangogirls.org/en/django_installation/](https://tutorial.djangogirls.org/en/django_installation/) for how to setup virtual environment \u0026 to start your application in virtual environment.\n\n### Options\n\nFroala Editor provides several options for customizing the editor. See [https://froala.com/wysiwyg-editor/docs](https://froala.com/wysiwyg-editor/docs) for all available options.\nYou can provide a dictionary of these options as `FROALA_EDITOR_OPTIONS` setting in `settings.py`. These options would then be used for all instances of the WYSIWYG editor in the project.\n\nOptions for individual field can also be provided via `FroalaField` or `FroalaEditor` class. This overrides any options set via `FROALA_EDITOR_OPTIONS`:\n\n```python\nfrom django.db import models\nfrom froala_editor.fields import FroalaField\n\nclass Page(models.Model):\n  content = FroalaField(options={\n    'toolbarInline': True,\n  })\n```\n\n```python\nfrom django import forms\nfrom froala_editor.widgets import FroalaEditor\n\nclass PageForm(forms.ModelForm):\n  content = forms.TextField(widget=FroalaEditor(options={\n    'toolbarInline': True,\n  }))\n```\n\n### Theme\n\nYou may provide the name of the theme to be used as `theme` argument to `FroalaField` or `FroalaEditor`.\n\n```python\nfrom django.db import models\nfrom froala_editor.fields import FroalaField\n\nclass Page(models.Model):\n  content = FroalaField(theme='dark')\n```\n\n`FROALA_EDITOR_THEME` can be set in `settings.py` making all instances of the editor to use a theme. However, `theme` argument in `FroalaField` and `FroalaEditor` overrides `FROALA_EDITOR_THEME`. Using a theme named 'dark' would require the existence of the file `froala_editor/static/froala_editor/css/themes/dark.min.css`. Available themes are: 'dark', 'gray' and 'red'.\n\n### Plugins\n\nFroala Editor comes with the plugins: block style, text \u0026 background colors, font size, font family, insert video, insert table, media manager, lists and file upload. By default, all plugins are enabled by default in this package. See [https://froala.com/wysiwyg-editor/docs/plugins](\u003chttps://froala.com/wysiwyg-editor/docs/plugins\u003e) for all available plugins.\n\n`FROALA_EDITOR_PLUGINS` can be set in `settings.py` to tell which plugins should all instances of Froala Editor be using. By default, it is\n\n```python\nFROALA_EDITOR_PLUGINS = ('align', 'char_counter', 'code_beautifier' ,'code_view', 'colors', 'draggable', 'emoticons',\n        'entities', 'file', 'font_family', 'font_size', 'fullscreen', 'image_manager', 'image', 'inline_style',\n        'line_breaker', 'link', 'lists', 'paragraph_format', 'paragraph_style', 'quick_insert', 'quote', 'save', 'table',\n        'url', 'video')\n```\n\nThe usage of `plugins` argument with `FroalaEditor` or `FroalaField` overrides this for that particular instance.\n\n```python\nfrom django.db import models\nfrom froala_editor.fields import FroalaField\n\nclass Page(models.Model):\n  content = FroalaField(plugins=('font_size', 'font_family'))\n```\n\n### Third party integrations\n\n`FROALA_EDITOR_THIRD_PARTY` setting can be used to configure third party integrations. Aviary Image Editor and SCAYT Web SpellChecker are available for now.\nTo enable, in `settings.py`:\n\n```python\nFRAOLA_EDITOR_THIRD_PARTY = ('image_aviary', 'spell_checker')\n```\n\nSimilar to plugin configuration, this can also be overridden on `ForalaEditor` and `FroalaField`.\n\nUse your key for SCAYT Web SpellChecker with `SCAYT_CUSTOMER_ID` in your project setings.\n\n\n### Image upload\n\n`FroalaEditor` and `FroalaField` optionally take in a boolean value for `image_upload` argument to enable or disable image uploads. Image uploads are enabled by default if the urls of this package are included in your urls.py.\n\nYou can use `FROALA_UPLOAD_PATH` setting in `settings.py` to change the path where uploaded files are stored within the `MEDIA_ROOT`. By default, `uploads/froala_editor/images` is used for storing uploaded images.\n\n### Other Settings\n\n`USE_FROALA_EDITOR` - default True  \n If set to Falsein your Django settings disables Froala editor and uses a TextArea instead.\n\n`FROALA_STORAGE_BACKEND`  \nThis allows for the storage used for uploaded images and files to be changed through settings. If nothing is provided it uses default_storage, otherwise it uses this backend. Using this you can specify a different storage backend like S3 only for Froala.\n\n`FROALA_JS_COOKIE` - default False.  \nIf set to True, it assumes [js-cookie](https://github.com/js-cookie/js-cookie) is installed and included to get the CSRF token using js-cookie.\n\n### Release\n\nTo publish to PyPi, the following command should be run:\n```bash\npython setup.py sdist upload -r pypi\n```\n\n## License\n\nThis package is available under BSD License. However, in order to use Froala WYSIWYG HTML Editor plugin you should purchase a license for it.\n\nSee [https://froala.com/wysiwyg-editor/pricing](https://froala.com/wysiwyg-editor/pricing) for licensing the Froala Editor.\n\nIf you bought a license and got your key, the easiest way to implement it is to put it into the `FROALA_EDITOR_OPTIONS` setting in `settings.py`:\n\n```python\nFROALA_EDITOR_OPTIONS = {\n  'key': '\u003cour key goes here\u003e',\n  # other options\n  # ...\n}\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffroala%2Fdjango-froala-editor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffroala%2Fdjango-froala-editor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffroala%2Fdjango-froala-editor/lists"}