{"id":13404285,"url":"https://github.com/publify/publify","last_synced_at":"2025-11-17T03:09:08.358Z","repository":{"id":444388,"uuid":"66801","full_name":"publify/publify","owner":"publify","description":"A self hosted Web publishing platform on Rails.","archived":false,"fork":false,"pushed_at":"2025-11-03T09:19:05.000Z","size":32923,"stargazers_count":1856,"open_issues_count":86,"forks_count":3662,"subscribers_count":69,"default_branch":"master","last_synced_at":"2025-11-06T22:02:30.725Z","etag":null,"topics":["blog-engine","hacktoberfest","rails","ruby"],"latest_commit_sha":null,"homepage":"http://publify.github.io/","language":"Less","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/publify.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"MIT-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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2008-10-23T14:45:23.000Z","updated_at":"2025-10-18T05:41:40.000Z","dependencies_parsed_at":"2023-07-06T18:33:27.312Z","dependency_job_id":"7f87eba7-2dc8-4af1-a5a7-41e6e5c85053","html_url":"https://github.com/publify/publify","commit_stats":{"total_commits":7000,"total_committers":128,"mean_commits":54.6875,"dds":0.5927142857142857,"last_synced_commit":"02f571cfcc96ae041e6908b9f5c4f510a9c1dc29"},"previous_names":["fdv/typo","fdv/publify"],"tags_count":100,"template":false,"template_full_name":null,"purl":"pkg:github/publify/publify","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/publify%2Fpublify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/publify%2Fpublify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/publify%2Fpublify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/publify%2Fpublify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/publify","download_url":"https://codeload.github.com/publify/publify/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/publify%2Fpublify/sbom","scorecard":{"id":394882,"data":{"date":"2025-08-11","repo":{"name":"github.com/publify/publify","commit":"6c6809617e0eb0e53407f244c5f7588423b152ab"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/1 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":"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":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ruby.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":8,"reason":"10 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 8","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":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":"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":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ruby.yml:93: update your workflow using https://app.stepsecurity.io/secureworkflow/publify/publify/ruby.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ruby.yml:95: update your workflow using https://app.stepsecurity.io/secureworkflow/publify/publify/ruby.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ruby.yml:112: update your workflow using https://app.stepsecurity.io/secureworkflow/publify/publify/ruby.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ruby.yml:114: update your workflow using https://app.stepsecurity.io/secureworkflow/publify/publify/ruby.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ruby.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/publify/publify/ruby.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ruby.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/publify/publify/ruby.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ruby.yml:70: update your workflow using https://app.stepsecurity.io/secureworkflow/publify/publify/ruby.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ruby.yml:72: update your workflow using https://app.stepsecurity.io/secureworkflow/publify/publify/ruby.yml/master?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction 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":"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":"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: MIT-LICENSE:0","Info: FSF or OSI recognized license: MIT License: MIT-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":"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":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":10,"reason":"SAST tool is run on all commits","details":["Info: all commits (30) 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-18T18:44:18.820Z","repository_id":444388,"created_at":"2025-08-18T18:44:18.820Z","updated_at":"2025-08-18T18:44:18.820Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":284267159,"owners_count":26975800,"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","status":"online","status_checked_at":"2025-11-13T02:00:06.582Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["blog-engine","hacktoberfest","rails","ruby"],"created_at":"2024-07-30T19:01:42.220Z","updated_at":"2025-11-17T03:09:08.306Z","avatar_url":"https://github.com/publify.png","language":"Less","funding_links":[],"categories":["Less","CMS","Ruby","Happy Exploring 🤘","Open Source Rails Apps","Apps","hacktoberfest"],"sub_categories":["Articles","Writing"],"readme":"# Publify\n\n**The Ruby on Rails publishing software formerly known as Typo**\n\n[![Build status](https://github.com/publify/publify/actions/workflows/ruby.yml/badge.svg)](https://github.com/publify/publify/actions/workflows/ruby.yml)\n[![Code Climate](https://codeclimate.com/github/publify/publify.svg)](https://codeclimate.com/github/publify/publify)\n[![Reviewed by Hound](https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg)](https://houndci.com)\n\n## What's Publify?\n\nPublify is a simple but full featured web publishing software. It's built\naround a blogging engine and a small message system connected to Twitter.\n\nPublify follows the principles of the IndieWeb, which are self hosting your Web\nsite, and Publish On your Own Site, Syndicate Everywhere.\n\nPublify has been around since 2004 and is the oldest Ruby on Rails open source\nproject alive.\n\n## Features\n\n- A classic multi user blogging engine\n- Short messages with a Twitter connection\n- Text filters (Markdown, SmartyPants, @mention to link, #hashtag to link)\n- A widgets system and a plugin API\n- Custom themes\n- Advanced SEO capabilities\n- Multilingual : Publify is (more or less) translated in English, French,\n  German, Danish, Norwegian, Japanese, Hebrew, Simplified Chinese, Mexican\n  Spanish, Italian, Lithuanian, Dutch, Polish, Romanian…\n\n## Demo site\n\nYou can give Publify a try at [the demo site](https://publify-demo.fly.dev/).\n\nThe demo is reset every hour.\n\n## Install\n\n### Download\n\nYou can download the latest\nPublify [stable release](https://github.com/publify/publify/releases/latest).\n\nIf you want to run the master branch, you can [clone the Publify\nrepository](https://github.com/publify/publify.git). However, random things may\nbe broken there at any time, so tread carefully!\n\n**Running the master branch in production is not recommended!**\n\n### Install Publify locally\n\nTo install Publify you need the following:\n\n- CRuby (MRI) 2.5, 2.6 or 2.7\n- Ruby on Rails 5.2.x\n- A database engine, MySQL, PgSQL or SQLite3\n- A compatible JavaScript installation for asset compilation. See\n  [the execjs readme](https://github.com/sstephenson/execjs#readme) for details.\n- ImageMagick (used by `mini_magick`).\n\n1.  Unzip Publify archive\n2.  Rename database.yml.yourEngine as database.yml\n3.  Edit database.yml to add your database name, login and password.\n\n```bash\n$ bundle install\n$ rake db:setup\n$ rake db:migrate\n$ rake db:seed\n$ rake assets:precompile\n$ rails server\n```\n\nYou can now launch you browser and access 127.0.0.1:3000.\n\n### Install Publify on a server\n\nYou can use your preferred installation method (e.g., Capistrano) to install\nPublify on a server. You will also need to set up the environment so it\ncontains at least `SECRET_KEY_BASE`. Your web server may allow you to set this,\nor you can consider using a tool like `dotenv`.\n\n### Install Publify on Heroku\n\nIn order to install Publify on Heroku, you’ll need to do some minor tweaks.\n\nFirst of all, you need to set up Amazon S3 storage to be able to upload files on\nyour blog. Set Heroku config vars.\n\n```bash\nheroku config:set PROVIDER=AWS\nheroku config:set AWS_ACCESS_KEY_ID=\u003cyour_aws_access_key_id\u003e\nheroku config:set AWS_SECRET_ACCESS_KEY=\u003cyour_aws_secret_access_key\u003e\nheroku config:set AWS_BUCKET=\u003cyour_aws_bucket_name\u003e\n```\n\nNext, you need to update `Gemfile`. You should remove the `mysql2` and\n`sqlite3` gems, set the Ruby version, and add `rails_12factor`. The top of your\n`Gemfile` should look something like this:\n\n```ruby\nsource 'https://rubygems.org'\n\nruby '2.7.4' # Or whichever version you're running\ngem 'pg'\ngem 'rails_12factor'\n\ngem 'rails', '~\u003e 5.2.6'\n```\n\nNext, to regenerate the Gemfile.lock, run:\n```bash\nbundle install\n```\n\nCommit your updated `Gemfile` and `Gemfile.lock`:\n\n```bash\ngit commit -am 'Update bundle for Heroku'\n```\n\nCreate a file `Procfile` containing the following:\n```\nweb: bundle exec puma -C config/puma.rb\n```\n\nCommit your new `Procfile`:\n```bash\ngit add Procfile\ngit ci -m 'Tell Heroku how to run Rails'\n```\n\nYou also need to set Rails' secret key base. Generate one using `rake secret`,\nthen set the Heroku config var:\n\n```bash\nheroku config:set SECRET_KEY_BASE=\u003cyour_generated_secret\u003e\n```\n\nPush the repository to Heroku.\n\nWhen deploying for the first time, Heroku will automatically add a Database\nplugin to your instance and links it to the application. After the first\ndeployment, don't forget to run the database migration and seed.\n\n```bash\nheroku run rake db:migrate db:seed\n```\n\nIf application error has occurred after migration, you need to restart Heroku server.\n\n```bash\nheroku restart\n```\n\n## Resources\n\n- [Sidebar Plugins](https://github.com/publify/publify/wiki/Sidebar-plugins)\n- [In page Plugins](https://github.com/publify/publify/wiki/In-Page-Plugins)\n- [**Report a bug**](https://github.com/publify/publify/issues)\n- [**Frequently Asked Questions**](https://github.com/publify/publify/wiki/frequently-asked-questions)\n- [Publify on Twitter](https://twitter.com/getpublify)\n- IRC: \\#publify on irc.freenode.net\n\n## Maintainers\n\n### Current Maintainers\n\n**Frédéric de Villamil**\nblog: http://t37.net\n\n**Matijs van Zuijlen**\nblog: http://www.matijs.net/blog/\n\n**Thomas Lecavelier**\nblog: http://blog.ookook.fr/\n\n**Yannick François**\nblog: http://elsif.fr\n\n### Previous Maintainers \u0026 Notable Contributors\n\n**Cyril Mougel**\nblog: http://blog.shingara.fr\n\n**Davide D'Agostino**\nblog: http://www.lipsiasoft.com\n\n**Piers Cawley**\nblog: http://www.bofh.org.uk/\n\n**Scott Laird**\n\n**Kevin Ballard**\nblog: kevin.sb.org\n\n**Patrick Lenz**\n\n**Seth Hall**\n\nAnd [many more cool people who’ve one way or another contributed to\nPublify](https://github.com/publify/publify/graphs/contributors).\n\n**Original Author: Tobias Luetke**\nblog: http://blog.leetsoft.com/\n\nEnjoy,\nThe Publify team\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpublify%2Fpublify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpublify%2Fpublify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpublify%2Fpublify/lists"}