<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    
    <title>GitHub Ruby Monthly Trending Repositories</title>
    <description>Monthly Trending Repositories of Ruby on GitHub</description>
    
    <pubDate>Thu, 13 Aug 2026 03:38:41 GMT</pubDate>
    <link>https://mshibanami.github.io/GitHubTrendingRSS</link>
    
    <item>
      <title>opf/openproject</title>
      <link>https://github.com/opf/openproject</link>
      <description>&lt;p&gt;OpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;OpenProject&lt;/h1&gt; 
&lt;p&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/opf/openproject&quot; alt=&quot;GitHub release (latest by date)&quot; /&gt; &lt;img src=&quot;https://img.shields.io/github/commit-activity/m/opf/openproject&quot; alt=&quot;GitHub commit activity&quot; /&gt; &lt;img src=&quot;https://img.shields.io/github/checks-status/opf/openproject/dev&quot; alt=&quot;GitHub branch checks state&quot; /&gt; &lt;a href=&quot;https://github.com/opf/openproject/actions/workflows/test-core.yml&quot;&gt;&lt;img src=&quot;https://github.com/opf/openproject/actions/workflows/test-core.yml/badge.svg?branch=dev&quot; alt=&quot;Github Tests&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;We empower teams to achieve great things together for the good of society.&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;OpenProject is a web-based open source project management software for teams and organizations that require transparency, flexibility, and data sovereignty. Manage projects, portfolios, products, tasks, bugs, agile workflows, roadmaps, and team collaboration in a single platform. OpenProject can be self-hosted and is designed for organizations looking for an open source enterprise-ready alternative to tools such as Jira, MS Project, Monday, Asana, YouTrack while maintaining full control over their data and infrastructure.&lt;/p&gt; 
&lt;p&gt;OpenProject is trusted by organizations worldwide, including enterprises, public institutions, and highly regulated industries.&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/opf/openproject/dev/GitHub-tab-new.png&quot; alt=&quot;Screenshot of OpenProject, showing the GitHub tab on a work package&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;OpenProject&#39;s key features include:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.openproject.org/collaboration-software-features/project-portfolio-management/&quot;&gt;Project and portfolio management&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.openproject.org/collaboration-software-features/agile-project-management/&quot;&gt;Agile boards, Kanban, Scrum, SAFe&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.openproject.org/collaboration-software-features/project-planning-scheduling/&quot;&gt;Project planning and scheduling with Gantt charts&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.openproject.org/collaboration-software-features/product-development/&quot;&gt;Product and release planning&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.openproject.org/collaboration-software-features/task-management/&quot;&gt;Task management and team collaboration&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.openproject.org/collaboration-software-features/time-tracking/&quot;&gt;Time tracking, cost reporting, and budgeting&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.openproject.org/collaboration-software-features/#bug-tracking&quot;&gt;Bug tracking&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.openproject.org/collaboration-software-features/team-collaboration/&quot;&gt;Team collaboration, wikis, forums, news&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.openproject.org/collaboration-software-features/meeting-management/&quot;&gt;Meeting agendas and meeting minutes&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.openproject.org/integrations/&quot;&gt;Integrations: Nextcloud, XWiki, GitHub, GitLab, and more&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;More information can be found on our &lt;a href=&quot;https://www.openproject.org&quot;&gt;website&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Start now with OpenProject&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Free Trial&lt;/strong&gt;: &lt;a href=&quot;https://start.openproject.com/&quot;&gt;Start a 14-days free trial of OpenProject&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Community Edition&lt;/strong&gt;, free of charge: Download OpenProject and get started with the self-hosted Community edition. If you want to run an instance of OpenProject in production (or for evaluation), refer to our in-depth &lt;a href=&quot;https://www.openproject.org/download-and-installation/&quot;&gt;installation guides&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Enterprise Edition&lt;/strong&gt;: Sign up for the Enterprise version, choose between cloud or on-premises and benefit from comprehensive support and Enterprise add-ons.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Documentation&lt;/strong&gt;: Explore our &lt;a href=&quot;https://www.openproject.org/docs/&quot;&gt;comprehensive documentation&lt;/a&gt; to help you get up and running quickly.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Training&lt;/strong&gt;: &lt;a href=&quot;https://www.openproject.org/training-and-consulting/#training-signup&quot;&gt;Book one of our training or consulting offers&lt;/a&gt; to get your team on board in no time.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Report bugs&lt;/h2&gt; 
&lt;p&gt;You found a bug? Please &lt;a href=&quot;https://www.openproject.org/docs/development/report-a-bug/&quot;&gt;report it&lt;/a&gt; to our &lt;a href=&quot;https://community.openproject.org/projects/openproject&quot;&gt;OpenProject Community&lt;/a&gt;. Thank you!&lt;/p&gt; 
&lt;h2&gt;Contribute&lt;/h2&gt; 
&lt;p&gt;OpenProject is supported by its Community members, both companies and individuals.&lt;/p&gt; 
&lt;p&gt;We are always looking for new members to our Community, so if you are interested in improving OpenProject we would be glad to welcome and support you getting into the code. There are guides as well, e.g. a &lt;a href=&quot;https://www.openproject.org/docs/development/development-environment/&quot;&gt;Quick Start for Developers&lt;/a&gt;, but don&#39;t hesitate to simply &lt;a href=&quot;https://www.openproject.org/contact&quot;&gt;contact us&lt;/a&gt; if you have questions.&lt;/p&gt; 
&lt;p&gt;Working on OpenProject comes with the satisfaction of working on a widely used open source application.&lt;/p&gt; 
&lt;p&gt;Also, if you do not want to be limited to working on open source in your free time, OpenProject GmbH, the company contributing to the OpenProject development, &lt;a href=&quot;https://www.openproject.org/career/&quot;&gt;is hiring&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Stay in contact&lt;/h2&gt; 
&lt;p&gt;Here you can find our &lt;a href=&quot;https://www.openproject.org/contact/&quot;&gt;contact information&lt;/a&gt;. As we regularly update OpenProject, we recommend staying in touch – here is where you can find us:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.openproject.org/blog/community-instance/&quot;&gt;OpenProject Community&lt;/a&gt; with &lt;a href=&quot;https://community.openproject.org/projects/openproject/forums&quot;&gt;forum discussions&lt;/a&gt;: The open instance where we develop our features – transparent and open for discussions, bug reports or feature requests.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.linkedin.com/company/18706985&quot;&gt;LinkedIn&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/openproject/&quot;&gt;Reddit&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://fosstodon.org/@openproject&quot;&gt;Fosstodon&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://bsky.app/profile/openproject.bsky.social&quot;&gt;Bluesky&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Security / responsible disclosure&lt;/h2&gt; 
&lt;p&gt;We take security very seriously at OpenProject. We value any kind of feedback that will keep our Community secure. If you happen to come across a security issue we urge you to disclose it to us privately to allow our users and Community enough time to upgrade. Security issues will always take precedence over anything else in the pipeline.&lt;/p&gt; 
&lt;p&gt;For more information on how to disclose a security vulnerability, &lt;a href=&quot;https://raw.githubusercontent.com/opf/openproject/dev/docs/security-and-privacy/statement-on-security/README.md&quot;&gt;please see this page&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;OpenProject is licensed under the terms of the GNU General Public License version 3. See &lt;a href=&quot;https://raw.githubusercontent.com/opf/openproject/dev/COPYRIGHT&quot;&gt;COPYRIGHT&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/opf/openproject/dev/LICENSE&quot;&gt;LICENSE&lt;/a&gt; files for details.&lt;/p&gt; 
&lt;h2&gt;Credits&lt;/h2&gt; 
&lt;h3&gt;Icons&lt;/h3&gt; 
&lt;p&gt;Thanks to Vincent Le Moign and his fabulous Minicons icons on &lt;a href=&quot;http://www.webalys.com/minicons/icons-free-pack.php&quot;&gt;webalys.com&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;OpenProject icon font&lt;/h3&gt; 
&lt;p&gt;Published and created by the OpenProject Foundation (OPF) under &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/&quot;&gt;Creative Commons Attribution 3.0 Unported License&lt;/a&gt; with icons from the following sources &lt;a href=&quot;http://www.webalys.com/minicons&quot;&gt;Minicons Free Vector Icons Pack&lt;/a&gt; and &lt;a href=&quot;http://www.webalys.com/design-interface-application-framework.php&quot;&gt;User Interface Design framework&lt;/a&gt; both by webalys&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Creative Commons License&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;OpenProject Icon Font by the OpenProject Foundation (OPF) is licensed under Creative Commons Attribution 3.0 Unported License and Free for both personal and commercial use. You can copy, adapt, remix, distribute or transmit it.&lt;/p&gt; 
&lt;p&gt;Under this condition: provide a mention of the &quot;OpenProject Foundation&quot; and a link back to OpenProject &lt;a href=&quot;http://www.openproject.org&quot;&gt;www.openproject.org&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>docusealco/docuseal</title>
      <link>https://github.com/docusealco/docuseal</link>
      <description>&lt;p&gt;Open source DocuSign alternative. Create, fill, and sign digital documents ✍️&lt;/p&gt;&lt;hr&gt;&lt;h1 align=&quot;center&quot; style=&quot;border-bottom: none&quot;&gt; 
 &lt;div&gt; 
  &lt;a href=&quot;https://www.docuseal.com&quot;&gt; &lt;img alt=&quot;DocuSeal&quot; src=&quot;https://github.com/user-attachments/assets/38b45682-ffa4-4919-abde-d2d422325c44&quot; width=&quot;80&quot; /&gt; &lt;br /&gt; &lt;/a&gt; DocuSeal 
 &lt;/div&gt; &lt;/h1&gt; 
&lt;h3 align=&quot;center&quot;&gt; Open source document filling and signing &lt;/h3&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://hub.docker.com/r/docuseal/docuseal&quot;&gt; &lt;img alt=&quot;Docker releases&quot; src=&quot;https://img.shields.io/docker/v/docuseal/docuseal&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://discord.gg/qygYCDGck9&quot;&gt; &lt;img src=&quot;https://img.shields.io/discord/1125112641170448454?logo=discord&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://twitter.com/intent/follow?screen_name=docusealco&quot;&gt; &lt;img src=&quot;https://img.shields.io/twitter/follow/docusealco?style=social&quot; alt=&quot;Follow @docusealco&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;p&gt; DocuSeal is an open source platform that provides secure and efficient digital document signing and processing. Create PDF forms to have them filled and signed online on any device with an easy-to-use, mobile-optimized web tool. &lt;/p&gt; 
&lt;h2 align=&quot;center&quot;&gt; &lt;a href=&quot;https://demo.docuseal.tech&quot;&gt;✨ Live Demo&lt;/a&gt; &lt;span&gt;|&lt;/span&gt; &lt;a href=&quot;https://docuseal.com/sign_up&quot;&gt;☁️ Try in Cloud&lt;/a&gt; &lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://demo.docuseal.tech&quot;&gt;&lt;img src=&quot;https://github.com/docusealco/docuseal/assets/5418788/d8703ea3-361a-423f-8bfe-eff1bd9dbe14&quot; alt=&quot;Demo&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;PDF form fields builder (WYSIWYG)&lt;/li&gt; 
 &lt;li&gt;12 field types available (Signature, Date, File, Checkbox etc.)&lt;/li&gt; 
 &lt;li&gt;Multiple submitters per document&lt;/li&gt; 
 &lt;li&gt;Automated emails via SMTP&lt;/li&gt; 
 &lt;li&gt;Files storage on disk or AWS S3, Google Storage, Azure Cloud&lt;/li&gt; 
 &lt;li&gt;Automatic PDF eSignature&lt;/li&gt; 
 &lt;li&gt;PDF signature verification&lt;/li&gt; 
 &lt;li&gt;Users management&lt;/li&gt; 
 &lt;li&gt;Mobile-optimized&lt;/li&gt; 
 &lt;li&gt;7 UI languages with signing available in 14 languages&lt;/li&gt; 
 &lt;li&gt;API and Webhooks for integrations&lt;/li&gt; 
 &lt;li&gt;Easy to deploy in minutes&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Pro Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Company logo and white-label&lt;/li&gt; 
 &lt;li&gt;User roles&lt;/li&gt; 
 &lt;li&gt;Automated reminders&lt;/li&gt; 
 &lt;li&gt;Invitation and identity verification via SMS&lt;/li&gt; 
 &lt;li&gt;Conditional fields and formulas&lt;/li&gt; 
 &lt;li&gt;Bulk send with CSV, XLSX spreadsheet import&lt;/li&gt; 
 &lt;li&gt;SSO / SAML&lt;/li&gt; 
 &lt;li&gt;Template creation with HTML API (&lt;a href=&quot;https://www.docuseal.com/guides/create-pdf-document-fillable-form-with-html-api&quot;&gt;Guide&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;Template creation with PDF or DOCX and field tags API (&lt;a href=&quot;https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form&quot;&gt;Guide&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;Embedded signing form (&lt;a href=&quot;https://github.com/docusealco/docuseal-react&quot;&gt;React&lt;/a&gt;, &lt;a href=&quot;https://github.com/docusealco/docuseal-vue&quot;&gt;Vue&lt;/a&gt;, &lt;a href=&quot;https://github.com/docusealco/docuseal-angular&quot;&gt;Angular&lt;/a&gt; or &lt;a href=&quot;https://www.docuseal.com/docs/embedded&quot;&gt;JavaScript&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;Embedded document form builder (&lt;a href=&quot;https://github.com/docusealco/docuseal-react&quot;&gt;React&lt;/a&gt;, &lt;a href=&quot;https://github.com/docusealco/docuseal-vue&quot;&gt;Vue&lt;/a&gt;, &lt;a href=&quot;https://github.com/docusealco/docuseal-angular&quot;&gt;Angular&lt;/a&gt; or &lt;a href=&quot;https://www.docuseal.com/docs/embedded&quot;&gt;JavaScript&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.docuseal.com/pricing&quot;&gt;Learn more&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Deploy&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Heroku&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Railway&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;a href=&quot;https://heroku.com/deploy?template=https://github.com/docusealco/docuseal-heroku&quot;&gt;&lt;img alt=&quot;Deploy on Heroku&quot; src=&quot;https://www.herokucdn.com/deploy/button.svg?sanitize=true&quot; height=&quot;40&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;a href=&quot;https://railway.com/deploy/IGoDnc?referralCode=ruU7JR&quot;&gt;&lt;img alt=&quot;Deploy on Railway&quot; src=&quot;https://railway.app/button.svg?sanitize=true&quot; height=&quot;40&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;strong&gt;DigitalOcean&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;strong&gt;Render&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;a href=&quot;https://cloud.digitalocean.com/apps/new?repo=https://github.com/docusealco/docuseal-digitalocean/tree/master&amp;amp;refcode=421d50f53990&quot;&gt;&lt;img alt=&quot;Deploy on DigitalOcean&quot; src=&quot;https://www.deploytodo.com/do-btn-blue.svg?sanitize=true&quot; height=&quot;40&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;a href=&quot;https://render.com/deploy?repo=https://github.com/docusealco/docuseal-render&quot;&gt;&lt;img alt=&quot;Deploy to Render&quot; src=&quot;https://render.com/images/deploy-to-render-button.svg?sanitize=true&quot; height=&quot;40&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Docker&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;docker run --name docuseal -p 3000:3000 -v.:/data docuseal/docuseal
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;By default DocuSeal docker container uses an SQLite database to store data and configurations. Alternatively, it is possible to use PostgreSQL or MySQL databases by specifying the &lt;code&gt;DATABASE_URL&lt;/code&gt; env variable.&lt;/p&gt; 
&lt;h4&gt;Docker Compose&lt;/h4&gt; 
&lt;p&gt;Download docker-compose.yml into your private server:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;curl https://raw.githubusercontent.com/docusealco/docuseal/master/docker-compose.yml &amp;gt; docker-compose.yml
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Run the app under a custom domain over https using docker compose (make sure your DNS points to the server to automatically issue ssl certs with Caddy):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;sudo HOST=your-domain-name.com docker compose up
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;For Businesses&lt;/h2&gt; 
&lt;h3&gt;Integrate seamless document signing into your web or mobile apps with DocuSeal&lt;/h3&gt; 
&lt;p&gt;At DocuSeal we have expertise and technologies to make documents creation, filling, signing and processing seamlessly integrated with your product. We specialize in working with various industries, including &lt;strong&gt;Banking, Healthcare, Transport, Real Estate, eCommerce, KYC, CRM, and other software products&lt;/strong&gt; that require bulk document signing. By leveraging DocuSeal, we can assist in reducing the overall cost of developing and processing electronic documents while ensuring security and compliance with local electronic document laws.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.docuseal.com/contact&quot;&gt;Book a Meeting&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;Distributed under the AGPLv3 License with Section 7(b) Additional Terms. See &lt;a href=&quot;https://github.com/docusealco/docuseal/raw/master/LICENSE&quot;&gt;LICENSE&lt;/a&gt; and &lt;a href=&quot;https://github.com/docusealco/docuseal/raw/master/LICENSE_ADDITIONAL_TERMS&quot;&gt;LICENSE_ADDITIONAL_TERMS&lt;/a&gt; for more information. Unless otherwise noted, all files © 2023-2026 DocuSeal LLC.&lt;/p&gt; 
&lt;h2&gt;Tools&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.docuseal.com/online-signature&quot;&gt;Signature Maker&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.docuseal.com/sign-documents-online&quot;&gt;Sign Document Online&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.docuseal.com/fill-pdf&quot;&gt;Fill PDF Online&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;</description>
      
    </item>
    
    <item>
      <title>dependabot/dependabot-core</title>
      <link>https://github.com/dependabot/dependabot-core</link>
      <description>&lt;p&gt;🤖 Dependabot&#39;s core logic for creating update PRs.&lt;/p&gt;&lt;hr&gt;&lt;h1 align=&quot;center&quot;&gt; 
 &lt;picture&gt; 
  &lt;source media=&quot;(prefers-color-scheme: light)&quot; srcset=&quot;https://user-images.githubusercontent.com/7659/174594540-5e29e523-396a-465b-9a6e-6cab5b15a568.svg&quot; /&gt; 
  &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;https://user-images.githubusercontent.com/7659/174594559-0b3ddaa7-e75b-4f10-9dee-b51431a9fd4c.svg&quot; /&gt; 
  &lt;img src=&quot;https://user-images.githubusercontent.com/7659/174594540-5e29e523-396a-465b-9a6e-6cab5b15a568.svg?sanitize=true&quot; alt=&quot;Dependabot&quot; width=&quot;336&quot; /&gt; 
 &lt;/picture&gt; &lt;/h1&gt; 
&lt;p&gt;Welcome to the public home of Dependabot &lt;img alt=&quot;dependabot&quot; src=&quot;https://github.githubassets.com/images/icons/emoji/dependabot.png?v8&quot; /&gt;.&lt;/p&gt; 
&lt;h1&gt;Table of Contents&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#what-is-dependabot-core&quot;&gt;What is Dependabot-Core?&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#how-to-run-dependabot&quot;&gt;How to run Dependabot&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#contributing-to-dependabot&quot;&gt;Contributing to Dependabot&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#reporting-issues-and-feature-requests&quot;&gt;Reporting Issues and Feature Requests&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#submitting-pull-requests&quot;&gt;Submitting Pull Requests&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#new-ecosystems&quot;&gt;New Ecosystems&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#development-guide&quot;&gt;Development Guide&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#getting-a-development-environment-running&quot;&gt;Getting a Development Environment Running&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#debugging-problems&quot;&gt;Debugging Problems&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#running-tests&quot;&gt;Running Tests&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#profiling&quot;&gt;Profiling&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#architecture-and-code-layout&quot;&gt;Architecture and Code Layout&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#trademarks&quot;&gt;Trademarks&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#notes-for-project-maintainers&quot;&gt;Notes for Project Maintainers&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h1&gt;What is Dependabot-Core?&lt;/h1&gt; 
&lt;p&gt;Dependabot-Core is the library at the heart of &lt;a href=&quot;https://docs.github.com/en/code-security/dependabot&quot;&gt;Dependabot&lt;/a&gt; security / version updates.&lt;/p&gt; 
&lt;p&gt;Use it to generate automated pull requests updating dependencies for projects written in Ruby, JavaScript, Python, PHP, Dart, Elixir, Elm, Go, Rust, Java, Julia, and .NET. It can also update git submodules, Docker files, Opentofu, Terraform files and Pre-Commit hooks. Features include:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Check for the latest version of a dependency &lt;em&gt;that&#39;s resolvable given a project&#39;s other dependencies&lt;/em&gt;&lt;/li&gt; 
 &lt;li&gt;Generate updated manifest and lockfiles for a new dependency version&lt;/li&gt; 
 &lt;li&gt;Generate PR descriptions that include the updated dependency&#39;s changelogs, release notes, and commits&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;How to run Dependabot&lt;/h1&gt; 
&lt;p&gt;Most people are familiar with the Dependabot service that runs on &lt;a href=&quot;http://GitHub.com&quot;&gt;GitHub.com&lt;/a&gt; and GitHub Enterprise. Enabling that is as simple as &lt;a href=&quot;https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates&quot;&gt;checking a &lt;code&gt;dependabot.yml&lt;/code&gt; configuration file in to your repository&#39;s &lt;code&gt;.github&lt;/code&gt; directory&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;However, if you want to run a custom version of Dependabot or run it on another platform, you&#39;re not left out in the cold. This repo provides the logic necessary for hosting your own standalone Dependabot. It currently supports opening Pull Requests against repositories hosted on GitHub, Github Enterprise, Azure DevOps, GitLab, BitBucket, and AWS CodeCommit.&lt;/p&gt; 
&lt;p&gt;Dependabot-Core is a library, so you&#39;ll need an entrypoint script of some kind. Here are a few examples to help you get started.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you&#39;re looking to run Dependabot locally for development/debugging purposes, see the &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#development-guide&quot;&gt;Development Guide&lt;/a&gt;.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h2&gt;Dependabot CLI&lt;/h2&gt; 
&lt;p&gt;The open-source &lt;a href=&quot;https://github.com/dependabot/cli&quot;&gt;Dependabot CLI&lt;/a&gt; is our recommended entrypoint for standalone use cases.&lt;/p&gt; 
&lt;p&gt;We use it in production here at GitHub, and advanced users can also leverage it to run a self-hosted version of Dependabot within their own projects / CI systems.&lt;/p&gt; 
&lt;p&gt;It creates dependency diffs but does not create PRs. So you will need to wire that up yourself. To aid with that, we created the &lt;a href=&quot;https://github.com/dependabot/example-cli-usage&quot;&gt;example-cli-usage&lt;/a&gt; repo which demonstrates how to turn those diffs into actual PR&#39;s.&lt;/p&gt; 
&lt;h2&gt;Write your own Ruby-based tool&lt;/h2&gt; 
&lt;p&gt;Alternatively, because Dependabot-Core is a Ruby library, you can write your own ruby-based wrapper that leverages the Dependabot-core code. The tricky bit is Dependabot assumes it&#39;s running in an isolated, throw-away environment so you&#39;ll need to handle all that yourself. For example protecting against security risks of arbitrary code execution exfiltrating credentials, ensuring the appropriate version of Go or Python or whatever language you need is available, and handling when Dependabot makes changes to its runtime environment.&lt;/p&gt; 
&lt;h2&gt;Dependabot on CI&lt;/h2&gt; 
&lt;p&gt;In an environment such as GitHub where Dependabot runs in a container, if you want to change your build or installation process depending on whether it&#39;s running within the context of the Dependabot container, you can check the existence of the &lt;code&gt;DEPENDABOT&lt;/code&gt; environment variable.&lt;/p&gt; 
&lt;h1&gt;Contributing to Dependabot&lt;/h1&gt; 
&lt;h2&gt;Reporting issues and Feature Requests&lt;/h2&gt; 
&lt;p&gt;👋 Want to give us feedback on Dependabot, or contribute to it? That&#39;s great - thank you so much!&lt;/p&gt; 
&lt;h3&gt;Reproducible Example&lt;/h3&gt; 
&lt;p&gt;Most bug reports should be accompanied by a link to a public repository that reproduces the problem. Bug reports that cannot be reproduced on a public repo using the &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#cli-tool&quot;&gt;CLI tool&lt;/a&gt; or &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#dry-run-script&quot;&gt;dry-run script&lt;/a&gt; may be closed as &quot;cannot reproduce&quot;.&lt;/p&gt; 
&lt;h3&gt;No &quot;+1&quot; Comments&lt;/h3&gt; 
&lt;p&gt;Our issue tracker is quite active, and as a result there&#39;s a good chance someone already filed the same issue. If so, please upvote that issue, because we use 👍 reactions on issues as one signal to gauge the impact of a feature request or bug.&lt;/p&gt; 
&lt;p&gt;However, please do not leave comments that contribute nothing new to the discussion. For details, see &lt;a href=&quot;https://go.dev/wiki/NoPlusOne&quot;&gt;https://go.dev/wiki/NoPlusOne&lt;/a&gt;. This is open source, if you see something you want fixed, we are happy to coach you through contributing a pull request to fix it.&lt;/p&gt; 
&lt;h3&gt;Don&#39;t file issues about Security Alerts or Dependency Graph&lt;/h3&gt; 
&lt;p&gt;The issue-tracker is meant solely for issues related to Dependabot&#39;s updating logic. Issues about &lt;a href=&quot;https://docs.github.com/en/code-security/dependabot/dependabot-alerts/about-dependabot-alerts&quot;&gt;security alerts&lt;/a&gt; or &lt;a href=&quot;https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-the-dependency-graph&quot;&gt;Dependency Graph&lt;/a&gt; should instead be filed as a &lt;a href=&quot;https://github.com/orgs/community/discussions/categories/code-security&quot;&gt;Code Security discussion&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;A good rule of thumb is that if you have questions about the &lt;em&gt;diff&lt;/em&gt; in a PR, it belongs here.&lt;/p&gt; 
&lt;h3&gt;Disclosing Security Issues&lt;/h3&gt; 
&lt;p&gt;If you believe you have found a security vulnerability in Dependabot, please review &lt;a href=&quot;https://github.com/dependabot/dependabot-core/security/policy&quot;&gt;our security policy&lt;/a&gt; for details about disclosing them to the GitHub Bug Bounty program, so we can work to resolve the issue before it is disclosed publicly.&lt;/p&gt; 
&lt;h2&gt;Submitting Pull Requests&lt;/h2&gt; 
&lt;p&gt;Want to contribute to Dependabot? That&#39;s great - thank you so much!&lt;/p&gt; 
&lt;p&gt;Contribution workflow:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Fork the project.&lt;/li&gt; 
 &lt;li&gt;Get the &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#getting-a-development-environment-running&quot;&gt;development environment running&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Make your feature addition or bug fix.&lt;/li&gt; 
 &lt;li&gt;Add &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#running-tests&quot;&gt;tests for it&lt;/a&gt;. This is important so we don&#39;t break it in a future version unintentionally.&lt;/li&gt; 
 &lt;li&gt;Send a pull request. The tests will run on it automatically, so don&#39;t worry if you couldn&#39;t get them running locally.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Please refer to the &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING&lt;/a&gt; guidelines for more information.&lt;/p&gt; 
&lt;h2&gt;New Ecosystems&lt;/h2&gt; 
&lt;p&gt;If you&#39;re interested in contributing support for a new ecosystem, please refer to the &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/CONTRIBUTING.md#contributing-new-ecosystems&quot;&gt;contributing guidelines&lt;/a&gt; for more information.&lt;/p&gt; 
&lt;h1&gt;Development Guide&lt;/h1&gt; 
&lt;h2&gt;Getting a Development Environment Running&lt;/h2&gt; 
&lt;p&gt;The first step to debugging a problem or writing a new feature is getting a development environment going. We provide a custom &lt;a href=&quot;https://www.docker.com/products/docker-desktop/&quot;&gt;Docker-based&lt;/a&gt; developer shell that bakes in all required dependencies. In most cases this is the best way to work with the project.&lt;/p&gt; 
&lt;p&gt;The developer shell uses volume mounts to incorporate your local changes to Dependabot&#39;s source code. This way you can edit locally using your favorite editor and the changes are immediately reflected within the docker container for performing &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#debugging-problems&quot;&gt;dry-runs&lt;/a&gt; or executing &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#running-tests&quot;&gt;tests&lt;/a&gt;. Note: See caveat about &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#making-changes-to-native-package-manager-helpers&quot;&gt;editing the native package manager helper scripts&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Quickstart&lt;/h3&gt; 
&lt;p&gt;The script to launch the developer shell builds the docker images from scratch if it can&#39;t find them locally. This can take a while.&lt;/p&gt; 
&lt;p&gt;Skip the wait by pulling the pre-built image for the ecosystem you want to work on. The image name uses the &lt;a href=&quot;https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#package-ecosystem&quot;&gt;YAML ecosystem name&lt;/a&gt; to specify the ecosystem. For example, for Go Modules, the YAML name is &lt;code&gt;gomod&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;$ docker pull ghcr.io/dependabot/dependabot-updater-gomod
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Pre-built images are currently only available for AMD64 / Intel architecture. They &lt;em&gt;will&lt;/em&gt; run on ARM, but 2x-3x slower than if you &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#building-images-from-scratch&quot;&gt;manually build ARM-specific images&lt;/a&gt;.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;Next, run the developer shell, specifying the desired ecosystem &lt;em&gt;using the top-level directory name of the ecosystem in this project&lt;/em&gt;. For example, for Go Modules, the top-level directory is named &lt;code&gt;go_modules&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;$ bin/docker-dev-shell go_modules
=&amp;gt; running docker development shell
[dependabot-core-dev] ~ $ cd go_modules &amp;amp;&amp;amp; rspec spec # to run tests for a particular package
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Building Images from Scratch&lt;/h3&gt; 
&lt;p&gt;Normally the &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#quickstart&quot;&gt;Quickstart&lt;/a&gt; is all you need, but occasionally you&#39;ll need to rebuild the underlying images.&lt;/p&gt; 
&lt;p&gt;For example, while we don&#39;t yet publish ARM-specific images, if you &lt;em&gt;are&lt;/em&gt; working on an ARM-based platform, we recommend manually building the images because the resulting containers run much faster.&lt;/p&gt; 
&lt;p&gt;The developer shell runs within a Dependabot Development docker image, which is built on top of an ecosystem image.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;flowchart LR
    A[&quot;docker-dev-shell script&quot;] --&amp;gt; B(&quot;Dependabot Development docker image&quot;)
    B --&amp;gt; C(&quot;Dependabot Updater Ecosystem docker image (ecosystem specific)&quot;)
    C --&amp;gt; D(&quot;Dependabot Updater Core docker image&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Changes to the docker files for any of these images requires building one or more of the images locally in order to be reflected in the development shell.&lt;/p&gt; 
&lt;p&gt;The simple but slow way is to delete any existing images and then run &lt;code&gt;bin/docker-dev-shell&lt;/code&gt; which automatically builds missing images.&lt;/p&gt; 
&lt;p&gt;The faster way is to pull all the pre-built images that are dependencies of the image you actually need to build. To (re)build a specific one:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;The Updater core image:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;$ docker pull ghcr.io/dependabot/dependabot-updater-core # OR
$ docker build -f Dockerfile.updater-core . --tag=dependabot-manual-build/updater-core # recommended on ARM
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Each language/ecosystem sits on top of the core image. You need to rebuild whichever one you’re working on so it picks up your new core bits. For instance, if you’re working on &lt;strong&gt;Go Modules&lt;/strong&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;The Updater ecosystem image:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;$ docker pull ghcr.io/dependabot/dependabot-updater-gomod # OR
$ script/build go_modules # recommended on ARM
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;Or explicitly:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;$ docker build \
--platform linux/amd64 \
--file go_modules/Dockerfile \
--build-arg UPDATER_CORE_IMAGE=dependabot-manual-build/updater-core \
--tag dependabot-manual-build/updater-gomod \
.
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Spin-up the development container using the &lt;code&gt;--rebuild&lt;/code&gt; flag:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;$ bin/docker-dev-shell go_modules --rebuild
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;If successful, you should be inside the shell:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;=&amp;gt; running docker development shell
[dependabot-core-dev] ~ $
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Once inside the shell, you can run tests, e.g.:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;rspec common/spec/dependabot/file_fetchers/base_exclude_spec.rb
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Making Changes to native Package Manager helpers&lt;/h3&gt; 
&lt;p&gt;Several Dependabot packages make use of &#39;native helpers&#39;, small executables in their host language.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Changes to these files are not automatically reflected inside the development container.&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Once you have made any edits to the helper files, run the appropriate build script to update the installed version with your changes like so:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ bin/docker-dev-shell bundler
=&amp;gt; running docker development shell
$ bundler/helpers/v2/build
$ bin/dry-run.rb bundler dependabot/demo --dir=&quot;/ruby&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To view logs and stdout from the native package manager helpers, see &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#debugging-native-package-manager-helpers&quot;&gt;debugging native helpers&lt;/a&gt;.&lt;/p&gt; 
&lt;h1&gt;Debugging Problems&lt;/h1&gt; 
&lt;p&gt;The first step to debugging is getting the &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#getting-a-development-environment-running&quot;&gt;development environment running&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Within the development environment, you have two options for simulating a dependency update job: You can use the newly-developed &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#cli-tool&quot;&gt;CLI tool&lt;/a&gt; or the original &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#dry-run-script&quot;&gt;Dry-run script&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;CLI tool&lt;/h2&gt; 
&lt;p&gt;The &lt;a href=&quot;https://github.com/dependabot/cli&quot;&gt;Dependabot CLI&lt;/a&gt; is a newly-developed tool that incorporates the &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#private-registry-credential-management&quot;&gt;GitHub Credentials Proxy&lt;/a&gt; to more realistically simulate what&#39;s happening within the Dependabot-at-GitHub service when talking to private registries.&lt;/p&gt; 
&lt;p&gt;It has a &lt;a href=&quot;https://github.com/dependabot/cli#debugging-with-the-cli&quot;&gt;dedicated debugging guide&lt;/a&gt;, including support for dropping into the Ruby debugger.&lt;/p&gt; 
&lt;h2&gt;Dry-Run Script&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Note: Before running the dry-run script, you&#39;ll need to &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#getting-a-development-environment-running&quot;&gt;get the development environment running&lt;/a&gt;.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;You can use the &lt;code&gt;bin/dry-run.rb&lt;/code&gt; script to simulate a dependency update job, printing the diff that would be generated to the terminal. It takes two positional arguments: the &lt;a href=&quot;https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#package-ecosystem&quot;&gt;package manager&lt;/a&gt; and the GitHub repo name (including the account):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ bin/docker-dev-shell go_modules
=&amp;gt; running docker development shell
$ bin/dry-run.rb go_modules rsc/quote
=&amp;gt; fetching dependency files
=&amp;gt; parsing dependency files
=&amp;gt; updating 2 dependencies
...
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Helpful options to speed up dry-run testing&lt;/h3&gt; 
&lt;p&gt;The &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#dry-run-script&quot;&gt;Dry-Run script&lt;/a&gt; supports many other options, all of which are documented at the &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/bin/dry-run.rb&quot;&gt;top of the script&#39;s source code&lt;/a&gt;. For example:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;LOCAL_GITHUB_ACCESS_TOKEN=&quot;fake-GitHub-PAT&quot;&lt;/code&gt; allows specifying a &lt;a href=&quot;https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token&quot;&gt;GitHub Personal Access Token (PAT)&lt;/a&gt; to avoid rate-limiting.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--dir=&quot;path/to/subdir/containing/manifest&lt;/code&gt; is required if the manifest file is located in a subdirectory.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--dep=&quot;dep-name-that-I-want-to-test&quot;&lt;/code&gt; allows specifying a single dep to try to update and all others are ignored.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--cache=files&lt;/code&gt; allows caching remote dep files locally for faster re-runs when testing local logic changes.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--updater-options=feature_flag_name&lt;/code&gt; allows passing in feature flags.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Here&#39;s an example of how to string all these together&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;  LOCAL_GITHUB_ACCESS_TOKEN=github_pat_123_fake_string \
  bin/dry-run.rb docker jeffwidman/secrets-store-driver \
  --dir &quot;/manifest_staging/charts/secrets-store-provider&quot; \
  --cache=files \
  --dep=&quot;secrets-store&quot; \
  --updater-options=kubernetes_updates
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Adding debug breakpoints&lt;/h3&gt; 
&lt;p&gt;You can add a &lt;code&gt;debugger&lt;/code&gt; statement anywhere in the ruby code, for example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-ruby&quot;&gt;      def latest_resolvable_version
        debugger
        latest_version_finder.latest_version
      end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;When you execute the job, the Ruby debugger will open. It should look something like this:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-ruby&quot;&gt;[11, 20] in ~/go_modules/lib/dependabot/go_modules/update_checker.rb
    11|   module GoModules
    12|     class UpdateChecker &amp;lt; Dependabot::UpdateCheckers::Base
    13|       require_relative &quot;update_checker/latest_version_finder&quot;
    14|
    15|       def latest_resolvable_version
=&amp;gt;  16|         debugger
    17|         latest_version_finder.latest_version
    18|       end
    19|
    20|       # This is currently used to short-circuit latest_resolvable_version,
=&amp;gt;#0    Dependabot::GoModules::UpdateChecker#latest_resolvable_version at ~/go_modules/lib/dependabot/go_modules/update_checker.rb:16
  #1    Dependabot::GoModules::UpdateChecker#latest_version at ~/go_modules/lib/dependabot/go_modules/update_checker.rb:24
  # and 9 frames (use `bt&#39; command for all frames)
(rdbg)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;At this prompt, you can run &lt;a href=&quot;https://github.com/ruby/debug&quot;&gt;debugger commands&lt;/a&gt; to navigate around, or enter methods and variables to see what they contain. Try entering &lt;code&gt;dependency&lt;/code&gt; to see what dependency Dependabot is currently working on.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; While in the debugger, changes made to the source code will not be picked up. You will have to end your debugging session and restart it.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Debugging Native Package Manager Helpers&lt;/h3&gt; 
&lt;p&gt;When you&#39;re debugging an issue you often need to peek inside these scripts that run in a separate process.&lt;/p&gt; 
&lt;p&gt;Print all log statements from native helpers using &lt;code&gt;DEBUG_HELPERS=true&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;DEBUG_HELPERS=true bin/dry-run.rb bundler dependabot/demo --dir=&quot;/ruby&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Pause execution to debug a single native helper function using &lt;code&gt;DEBUG_FUNCTION=&amp;lt;function name&amp;gt;&lt;/code&gt;. The function maps to a native helper function name, for example, one of the functions in &lt;code&gt;bundler/helpers/v2/lib/functions.rb&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;When this function is being executed a &lt;code&gt;debugger&lt;/code&gt; is inserted, pausing execution of the &lt;code&gt;bin/dry-run.rb&lt;/code&gt; script, this leaves the current updates &lt;code&gt;tmp&lt;/code&gt; directory in place allowing you to &lt;code&gt;cd&lt;/code&gt; into the directory and run the native helper function directly:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt; DEBUG_FUNCTION=parsed_gemfile bin/dry-run.rb bundler dependabot/demo --dir=&quot;/ruby&quot;
=&amp;gt; fetching dependency files
=&amp;gt; dumping fetched dependency files: ./dry-run/dependabot/demo/ruby
=&amp;gt; parsing dependency files
$ cd /home/dependabot/dependabot-core/tmp/dependabot_TEMP/ruby &amp;amp;&amp;amp; echo &quot;{\&quot;function\&quot;:\&quot;parsed_gemfile\&quot;,\&quot;args\&quot;:{\&quot;gemfile_name\&quot;:\&quot;Gemfile\&quot;,\&quot;lockfile_name\&quot;:\&quot;Gemfile.lock\&quot;,\&quot;dir\&quot;:\&quot;/home/dependabot/dependabot-core/tmp/dependabot_TEMP/ruby\&quot;}}&quot; | BUNDLER_VERSION=1.17.3 BUNDLE_GEMFILE=/opt/bundler/v1/Gemfile GEM_HOME=/opt/bundler/v1/.bundle bundle exec ruby /opt/bundler/v1/run.rb
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Copy and run the &lt;code&gt;cd...&lt;/code&gt; command:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd /home/dependabot/dependabot-core/tmp/dependabot_TEMP/ruby &amp;amp;&amp;amp; echo &quot;{\&quot;function\&quot;:\&quot;parsed_gemfile\&quot;,\&quot;args\&quot;:{\&quot;gemfile_name\&quot;:\&quot;Gemfile\&quot;,\&quot;lockfile_name\&quot;:\&quot;Gemfile.lock\&quot;,\&quot;dir\&quot;:\&quot;/home/dependabot/dependabot-core/tmp/dependabot_TEMP/ruby\&quot;}}&quot; | BUNDLER_VERSION=1.17.3 BUNDLE_GEMFILE=/opt/bundler/v1/Gemfile GEM_HOME=/opt/bundler/v1/.bundle bundle exec ruby /opt/bundler/v1/run.rb
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This should log out the output of the &lt;code&gt;parsed_gemfile&lt;/code&gt; function:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-ruby&quot;&gt;{&quot;result&quot;:[{&quot;name&quot;:&quot;business&quot;,&quot;requirement&quot;:&quot;~&amp;gt; 1.0.0&quot;,&quot;groups&quot;:[&quot;default&quot;],&quot;source&quot;:null,&quot;type&quot;:&quot;runtime&quot;},{&quot;name&quot;:&quot;uk_phone_numbers&quot;,&quot;requirement&quot;:&quot;~&amp;gt; 0.1.0&quot;,&quot;groups&quot;:[&quot;default&quot;],&quot;source&quot;:null,&quot;type&quot;:&quot;runtime&quot;}]}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Keep in mind that unlike changes to the ruby source, changes on your host machine to the native helpers source code are not synced to the development container. So you have two choices for editing the native helper:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;You can directly edit the temporary copy of the native helper within the development container, for example: &lt;code&gt;vi /opt/bundler/v1/lib/functions/file_parser.rb&lt;/code&gt;. And then re-run the &lt;code&gt;cd...&lt;/code&gt; command. This is the fastest way to debug, but any changes won&#39;t be saved outside the container.&lt;/li&gt; 
 &lt;li&gt;You can edit your local copy, and then &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#making-changes-to-native-package-manager-helpers&quot;&gt;rebuild the native helper&lt;/a&gt;. This will require re-running the dry-run script to pickup the change.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Debugging Ignore Conditions&lt;/h3&gt; 
&lt;p&gt;Most of the ecosystems in Dependabot-Core support &lt;code&gt;ignore&lt;/code&gt; conditions which allow a user to specify dependency names or versions to exclude from upgrades. The docs for the Dependabot service at GitHub &lt;a href=&quot;https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#ignore&quot;&gt;describe the feature in more detail&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#cli-tool&quot;&gt;Dependabot CLI&lt;/a&gt; supports passing in ignore conditions as part of the job definition. See &lt;a href=&quot;https://github.com/dependabot/cli#scenario-file&quot;&gt;the example&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#dry-run-script&quot;&gt;dry-run script&lt;/a&gt; supports passing in one or more ignore conditions via the env var &lt;code&gt;IGNORE_CONDITIONS&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;IGNORE_CONDITIONS=&#39;[{&quot;dependency-name&quot;:&quot;*&quot;,&quot;update-types&quot;: [&quot;version-update:semver-major&quot;]}]&#39; \
bin/dry-run.rb docker test_org/test-dependabot`
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Debugging Security Updates&lt;/h3&gt; 
&lt;p&gt;Many of the ecosystems in Dependabot-Core support &lt;a href=&quot;https://docs.github.com/en/code-security/dependabot/dependabot-security-updates/about-dependabot-security-updates&quot;&gt;security updates&lt;/a&gt;. These are a special form of version update where a dependency name and range of vulnerable versions are passed in. Dependabot-Core will try to upgrade any instance of that dependency to the &lt;em&gt;minimum&lt;/em&gt; non-vulnerable version. This is in contrast to a normal version update which tries to update to the &lt;em&gt;latest&lt;/em&gt; version.&lt;/p&gt; 
&lt;p&gt;The env var &lt;code&gt;SECURITY_ADVISORIES&lt;/code&gt; allows passing one or more security alert notifications to the &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#dry-run-script&quot;&gt;dry-run script&lt;/a&gt; in order to simulate a security update:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;SECURITY_ADVISORIES=&#39;[{&quot;dependency-name&quot;:&quot;buffer&quot;,&quot;patched-versions&quot;:[],&quot;unaffected-versions&quot;:[],&quot;affected-versions&quot;:[&quot;&amp;lt;= 2.0.0&quot;]}]&#39; \
bin/dry-run.rb pub dart-lang/pub-dev --dir &quot;/app&quot; --cache=files --dep=&quot;buffer&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Visual Studio Code and Docker&lt;/h3&gt; 
&lt;p&gt;There&#39;s built-in support for leveraging Visual Studio Code&#39;s &lt;a href=&quot;https://code.visualstudio.com/docs/devcontainers/containers&quot;&gt;ability for debugging&lt;/a&gt; inside a Docker container. After installing the recommended &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers&quot;&gt;&lt;code&gt;Dev Containers&lt;/code&gt; extension&lt;/a&gt;, simply press &lt;code&gt;Ctrl+Shift+P&lt;/code&gt; (&lt;code&gt;⇧⌘P&lt;/code&gt; on macOS) and select &lt;code&gt;Dev Containers: Reopen in Container&lt;/code&gt;. You can also access the dropdown by clicking on the green button in the bottom-left corner of the editor. If the development Docker image isn&#39;t present on your machine, it will be built automatically. Once that&#39;s finished, start the &lt;code&gt;Debug Dry Run&lt;/code&gt; configuration &lt;code&gt;(F5)&lt;/code&gt; and you&#39;ll be prompted to select a package manager and a repository to perform a dry run on. Feel free to place breakpoints on the code.&lt;/p&gt; 
&lt;p&gt;There is also support to debug individual test runs by running the &lt;code&gt;Debug Tests&lt;/code&gt; configuration &lt;code&gt;(F5)&lt;/code&gt; and you&#39;ll be prompted to select an ecosystem and provide an rspec path.&lt;/p&gt; 
&lt;p&gt;⚠️ The &lt;code&gt;Clone Repository ...&lt;/code&gt; commands of the Remote Containers extension are currently missing some functionality and are therefore not supported. You have to clone the repository manually and use the &lt;code&gt;Reopen in Container&lt;/code&gt; or &lt;code&gt;Open Folder in Container...&lt;/code&gt; command.&lt;/p&gt; 
&lt;h2&gt;Running Tests&lt;/h2&gt; 
&lt;p&gt;Once you get the &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#getting-a-development-environment-running&quot;&gt;development environment for a particular ecosystem&lt;/a&gt; going, execute the tests for that ecosystem by running &lt;code&gt;rspec spec&lt;/code&gt; inside that ecosystem&#39;s folder, e.g.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ cd go_modules
$ rspec spec
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can also limit the tests to only the file you&#39;re working on, or only tests that previously failed, for example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ rspec spec/dependabot/file_updaters/elixir --only-failures
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Style is enforced by &lt;a href=&quot;https://rubocop.org/&quot;&gt;RuboCop&lt;/a&gt;. To check for style violations, simply run &lt;code&gt;rubocop&lt;/code&gt; in each of the packages, e.g.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ cd go_modules
$ rubocop
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Profiling&lt;/h2&gt; 
&lt;p&gt;You can profile a &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/#dry-run-script&quot;&gt;dry-run&lt;/a&gt; by passing the &lt;code&gt;--profile&lt;/code&gt; flag when running it, or tag an &lt;code&gt;rspec&lt;/code&gt; test with &lt;code&gt;:profile&lt;/code&gt;. This will generate a &lt;code&gt;stackprof-&amp;lt;datetime&amp;gt;.dump&lt;/code&gt; file in the &lt;code&gt;tmp/&lt;/code&gt; folder, and you can generate a flamegraph from this by running:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;stackprof --d3-flamegraph tmp/stackprof-&amp;lt;data or spec name&amp;gt;.dump &amp;gt; tmp/flamegraph.html
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1&gt;Architecture and Code Layout&lt;/h1&gt; 
&lt;p&gt;Dependabot-Core is a collection of Ruby packages (gems), which contain the logic for updating dependencies in several languages.&lt;/p&gt; 
&lt;h3&gt;&lt;code&gt;dependabot-common&lt;/code&gt;&lt;/h3&gt; 
&lt;p&gt;The &lt;code&gt;common&lt;/code&gt; package contains all general-purpose/shared functionality. For instance, the code for creating pull requests for the different supported platforms lives here, as does most of the logic for handling Git dependencies (as most languages support Git dependencies in one way or another). There are also base classes defined for each of the major concerns required to implement support for a language or package manager.&lt;/p&gt; 
&lt;h3&gt;&lt;code&gt;dependabot-{package-manager}&lt;/code&gt;&lt;/h3&gt; 
&lt;p&gt;There is a gem for each package manager or language that Dependabot supports. At a minimum, each of these gems will implement the following classes:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Service&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;FileFetcher&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Fetches the relevant dependency files for a project (e.g., the &lt;code&gt;Gemfile&lt;/code&gt; and &lt;code&gt;Gemfile.lock&lt;/code&gt;). See the &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/common/lib/dependabot/file_fetchers/README.md&quot;&gt;README&lt;/a&gt; for more details.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;FileParser&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Parses a dependency file and extracts a list of dependencies for a project. See the &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/common/lib/dependabot/file_parsers/README.md&quot;&gt;README&lt;/a&gt; for more details.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;UpdateChecker&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Checks whether a given dependency is up-to-date. See the &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/common/lib/dependabot/update_checkers/README.md&quot;&gt;README&lt;/a&gt; for more details.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;FileUpdater&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Updates a dependency file to use the latest version of a given dependency. See the &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/common/lib/dependabot/file_updaters/README.md&quot;&gt;README&lt;/a&gt; for more details.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;MetadataFinder&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Looks up metadata about a dependency, such as its GitHub URL. See the &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/common/lib/dependabot/metadata_finders/README.md&quot;&gt;README&lt;/a&gt; for more details.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;Version&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Describes the logic for comparing dependency versions. See the &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/hex/lib/dependabot/hex/version.rb&quot;&gt;hex Version class&lt;/a&gt; for an example.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;Requirement&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Describes the format of a dependency requirement (e.g. &lt;code&gt;&amp;gt;= 1.2.3&lt;/code&gt;). See the &lt;a href=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/hex/lib/dependabot/hex/requirement.rb&quot;&gt;hex Requirement class&lt;/a&gt; for an example.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;The high-level flow looks like this:&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/dependabot/dependabot-core/main/architecture.svg?sanitize=true&quot; alt=&quot;Dependabot high-level architecture diagram&quot; /&gt;&lt;/p&gt; 
&lt;h3&gt;&lt;code&gt;dependabot-omnibus&lt;/code&gt;&lt;/h3&gt; 
&lt;p&gt;This is a &quot;meta&quot; gem, that simply depends on all the others. If you want to automatically include support for all languages, you can just include this gem and you&#39;ll get all you need.&lt;/p&gt; 
&lt;h2&gt;Private Registry Credential Management&lt;/h2&gt; 
&lt;p&gt;For many ecosystems, Dependabot-Core supports private registries. Sometimes this happens by passing the private registry credentials directly to the native package managers (&lt;code&gt;npm&lt;/code&gt;, &lt;code&gt;pip&lt;/code&gt;, &lt;code&gt;bundler&lt;/code&gt;, etc), other times it happens within the Dependabot-Core Ruby code.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;sequenceDiagram
    Private Registry Credentials-&amp;gt;&amp;gt;Dependabot-Core:&amp;lt;br /&amp;gt;
    Dependabot-Core-&amp;gt;&amp;gt;Native Package Managers:&amp;lt;br /&amp;gt;
    Native Package Managers-&amp;gt;&amp;gt;Package Registries:&amp;lt;br /&amp;gt;
    Dependabot-Core-&amp;gt;&amp;gt;Package Registries:&amp;lt;br /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;While simple and straightforward, this is a security risk for ecosystems that allow running untrusted code within their manifest files. For example &lt;code&gt;setup.py&lt;/code&gt; and &lt;code&gt;.gemspec&lt;/code&gt; allow running native Python and Ruby code. If a package in the dependency tree gets hacked, an attacker could push a malicious manifest that forces the native package manager to expose the creds.&lt;/p&gt; 
&lt;p&gt;To guard against this, for the Dependabot service that Github runs, we wrap Dependabot-Core with a credential proxy so those private registry secrets are never exposed to Dependabot-Core.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;sequenceDiagram
    Dependabot-Core-&amp;gt;&amp;gt;Credentials Proxy: All requests are unauthenticated
    Credentials Proxy-&amp;gt;&amp;gt;Package Registries: Creds are injected by the Proxy
    Note left of Dependabot-Core: The Dependabot Service&amp;lt;br /&amp;gt; that GitHub Runs
    Package Registries-&amp;gt;&amp;gt;Credentials Proxy: Creds are stripped by the Proxy
    Credentials Proxy-&amp;gt;&amp;gt;Dependabot-Core: Dependabot-Core never sees private registry credentials
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This also means if Dependabot-Core ever has a security vulnerability, those creds are still not at risk of being exposed.&lt;/p&gt; 
&lt;h1&gt;Trademarks&lt;/h1&gt; 
&lt;p&gt;This project may contain trademarks or logos for projects, products, or services. Authorized use of GitHub trademarks or logos is subject to and must follow &lt;a href=&quot;https://github.com/logos&quot;&gt;GitHub Logos and Usage&lt;/a&gt;. Use of GitHub trademarks or logos in modified versions of this project must not cause confusion or imply GitHub sponsorship. Any use of third-party trademarks or logos are subject to those third-party’s policies.&lt;/p&gt; 
&lt;h1&gt;History&lt;/h1&gt; 
&lt;p&gt;Dependabot and dependabot-core started life as &lt;a href=&quot;https://github.com/gocardless/bump&quot;&gt;Bump&lt;/a&gt; and &lt;a href=&quot;https://github.com/gocardless/bump-core&quot;&gt;Bump Core&lt;/a&gt;, back when @hmarr and @greysteil were working at &lt;a href=&quot;https://gocardless.com&quot;&gt;GoCardless&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Dependabot became a part of GitHub in 2019!&lt;/p&gt; 
&lt;h1&gt;Notes for project maintainers&lt;/h1&gt; 
&lt;details&gt;
 &lt;summary&gt;&lt;span&gt;📖&lt;/span&gt; Release guide&lt;/summary&gt; 
 &lt;p&gt; &lt;/p&gt;
 &lt;p&gt;Publish a new release to RubyGems by running the &lt;a href=&quot;https://github.com/dependabot/dependabot-core/actions/workflows/gems-bump-version.yml&quot;&gt;&lt;code&gt;Gems - Bump Version&lt;/code&gt;&lt;/a&gt; workflow and following the instructions on the job summary.&lt;/p&gt; 
 &lt;p&gt;In a nutshell the process will be:&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;Run the action to generate a version bump PR.&lt;/li&gt; 
  &lt;li&gt;Merge the PR.&lt;/li&gt; 
  &lt;li&gt;Tag that merge commit as a new release using the format &lt;code&gt;v1.2.3&lt;/code&gt;. The job summary contains a URL pre-populated with the correct version for the title and tag.&lt;/li&gt; 
  &lt;li&gt;Once the release is tagged, another GitHub Action workflow automatically pushes it to RubyGems.&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;p&gt;&lt;/p&gt; 
&lt;/details&gt;</description>
      
    </item>
    
    <item>
      <title>rails/rails</title>
      <link>https://github.com/rails/rails</link>
      <description>&lt;p&gt;Ruby on Rails&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Welcome to Rails&lt;/h1&gt; 
&lt;h2&gt;What&#39;s Rails?&lt;/h2&gt; 
&lt;p&gt;Rails is a web application framework that includes everything needed to create database-backed web applications according to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Model-view-controller&quot;&gt;Model-View-Controller (MVC)&lt;/a&gt; pattern.&lt;/p&gt; 
&lt;p&gt;Understanding the MVC pattern is key to understanding Rails. MVC divides your application into three layers: Model, View, and Controller, each with a specific responsibility.&lt;/p&gt; 
&lt;h2&gt;Model layer&lt;/h2&gt; 
&lt;p&gt;The &lt;em&gt;&lt;strong&gt;Model layer&lt;/strong&gt;&lt;/em&gt; represents the domain model (such as Account, Product, Person, Post, etc.) and encapsulates the business logic specific to your application. In Rails, database-backed model classes are derived from &lt;code&gt;ActiveRecord::Base&lt;/code&gt;. &lt;a href=&quot;https://raw.githubusercontent.com/rails/rails/main/activerecord/README.rdoc&quot;&gt;Active Record&lt;/a&gt; allows you to present the data from database rows as objects and embellish these data objects with business logic methods. Although most Rails models are backed by a database, models can also be ordinary Ruby classes, or Ruby classes that implement a set of interfaces as provided by the &lt;a href=&quot;https://raw.githubusercontent.com/rails/rails/main/activemodel/README.rdoc&quot;&gt;Active Model&lt;/a&gt; module.&lt;/p&gt; 
&lt;h2&gt;View layer&lt;/h2&gt; 
&lt;p&gt;The &lt;em&gt;&lt;strong&gt;View layer&lt;/strong&gt;&lt;/em&gt; is composed of &quot;templates&quot; that are responsible for providing appropriate representations of your application&#39;s resources. Templates can come in a variety of formats, but most view templates are HTML with embedded Ruby code (ERB files). Views are typically rendered to generate a controller response or to generate the body of an email. In Rails, View generation is handled by &lt;a href=&quot;https://raw.githubusercontent.com/rails/rails/main/actionview/README.rdoc&quot;&gt;Action View&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Controller layer&lt;/h2&gt; 
&lt;p&gt;The &lt;em&gt;&lt;strong&gt;Controller layer&lt;/strong&gt;&lt;/em&gt; is responsible for handling incoming HTTP requests and providing a suitable response. Usually, this means returning HTML, but Rails controllers can also generate XML, JSON, PDFs, mobile-specific views, and more. Controllers load and manipulate models, and render view templates in order to generate the appropriate HTTP response. In Rails, incoming requests are routed by Action Dispatch to an appropriate controller, and controller classes are derived from &lt;code&gt;ActionController::Base&lt;/code&gt;. Action Dispatch and Action Controller are bundled together in &lt;a href=&quot;https://raw.githubusercontent.com/rails/rails/main/actionpack/README.rdoc&quot;&gt;Action Pack&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Frameworks and libraries&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rails/rails/main/activerecord/README.rdoc&quot;&gt;Active Record&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/rails/rails/main/activemodel/README.rdoc&quot;&gt;Active Model&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/rails/rails/main/actionpack/README.rdoc&quot;&gt;Action Pack&lt;/a&gt;, and &lt;a href=&quot;https://raw.githubusercontent.com/rails/rails/main/actionview/README.rdoc&quot;&gt;Action View&lt;/a&gt; can each be used independently outside Rails.&lt;/p&gt; 
&lt;p&gt;In addition to that, Rails also comes with:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rails/rails/main/actionmailer/README.rdoc&quot;&gt;Action Mailer&lt;/a&gt;, a library to generate and send emails&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rails/rails/main/actionmailbox/README.md&quot;&gt;Action Mailbox&lt;/a&gt;, a library to receive emails within a Rails application&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rails/rails/main/activejob/README.md&quot;&gt;Active Job&lt;/a&gt;, a framework for declaring jobs and making them run on a variety of queuing backends&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rails/rails/main/actioncable/README.md&quot;&gt;Action Cable&lt;/a&gt;, a framework to integrate WebSockets with a Rails application&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rails/rails/main/activestorage/README.md&quot;&gt;Active Storage&lt;/a&gt;, a library to attach cloud and local files to Rails applications&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rails/rails/main/actiontext/README.md&quot;&gt;Action Text&lt;/a&gt;, a library to handle rich text content&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rails/rails/main/activesupport/README.rdoc&quot;&gt;Active Support&lt;/a&gt;, a collection of utility classes and standard library extensions that are useful for Rails, and may also be used independently outside Rails&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;Install Rails at the command prompt if you haven&#39;t yet:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ gem install rails
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;At the command prompt, create a new Rails application:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ rails new myapp
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;where &quot;myapp&quot; is the application name.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Change directory to &lt;code&gt;myapp&lt;/code&gt; and start the web server:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ cd myapp
$ bin/rails server
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;Run with &lt;code&gt;--help&lt;/code&gt; or &lt;code&gt;-h&lt;/code&gt; for options.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Go to &lt;code&gt;http://localhost:3000&lt;/code&gt; and you&#39;ll see the Rails bootscreen with your Rails and Ruby versions.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Follow the guidelines to start developing your application. You may find the following resources handy:&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://guides.rubyonrails.org/getting_started.html&quot;&gt;Getting Started with Rails&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://guides.rubyonrails.org&quot;&gt;Ruby on Rails Guides&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://api.rubyonrails.org&quot;&gt;The API Documentation&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;We encourage you to contribute to Ruby on Rails! Please check out the &lt;a href=&quot;https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html&quot;&gt;Contributing to Ruby on Rails guide&lt;/a&gt; for guidelines about how to proceed. &lt;a href=&quot;https://contributors.rubyonrails.org&quot;&gt;Join us!&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Trying to report a possible security vulnerability in Rails? Please check out our &lt;a href=&quot;https://rubyonrails.org/security&quot;&gt;security policy&lt;/a&gt; for guidelines about how to proceed.&lt;/p&gt; 
&lt;p&gt;Everyone interacting in Rails and its sub-projects&#39; codebases, issue trackers, chat rooms, and mailing lists is expected to follow the Rails &lt;a href=&quot;https://rubyonrails.org/conduct&quot;&gt;code of conduct&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;Ruby on Rails is released under the &lt;a href=&quot;https://opensource.org/licenses/MIT&quot;&gt;MIT License&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>rapid7/metasploit-framework</title>
      <link>https://github.com/rapid7/metasploit-framework</link>
      <description>&lt;p&gt;Metasploit Framework&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Metasploit Framework&lt;/h1&gt; 
&lt;p&gt;The Metasploit Framework is an open-source tool released under a BSD-style license. For detailed licensing information, refer to the &lt;code&gt;COPYING&lt;/code&gt; file.&lt;/p&gt; 
&lt;h2&gt;Latest Version&lt;/h2&gt; 
&lt;p&gt;Access the latest version of Metasploit from the &lt;a href=&quot;https://docs.metasploit.com/docs/using-metasploit/getting-started/nightly-installers.html&quot;&gt;Nightly Installers&lt;/a&gt; page.&lt;/p&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;p&gt;Comprehensive documentation, including usage guides, is available at &lt;a href=&quot;https://docs.metasploit.com/&quot;&gt;Metasploit Docs&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Development Environment&lt;/h2&gt; 
&lt;p&gt;To set up a development environment, visit the &lt;a href=&quot;https://docs.metasploit.com/docs/development/get-started/setting-up-a-metasploit-development-environment.html&quot;&gt;Development Setup Guide&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Bug and Feature Requests&lt;/h2&gt; 
&lt;p&gt;Submit bugs and feature requests via the &lt;a href=&quot;https://github.com/rapid7/metasploit-framework/issues&quot;&gt;GitHub Issues&lt;/a&gt; tracker. New submissions can be made through the &lt;a href=&quot;https://github.com/rapid7/metasploit-framework/issues/new/choose&quot;&gt;MSF-BUGv1 form&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;API Documentation&lt;/h2&gt; 
&lt;p&gt;For information on writing modules, refer to the &lt;a href=&quot;https://docs.metasploit.com/api/&quot;&gt;API Documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Support and Communication&lt;/h2&gt; 
&lt;p&gt;For questions and suggestions, you can:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Join our &lt;a href=&quot;https://github.com/rapid7/metasploit-framework/discussions&quot;&gt;GitHub Discussions&lt;/a&gt; for community support and general questions&lt;/li&gt; 
 &lt;li&gt;Join the &lt;a href=&quot;https://join.slack.com/t/metasploit/shared_invite/zt-30i688it0-mJsFGT44IMtdeZi1DraamQ&quot;&gt;Metasploit Slack&lt;/a&gt; for real-time chat&lt;/li&gt; 
 &lt;li&gt;Submit &lt;a href=&quot;https://github.com/rapid7/metasploit-framework/issues&quot;&gt;GitHub Issues&lt;/a&gt; for bug reports and feature requests&lt;/li&gt; 
 &lt;li&gt;Follow &lt;a href=&quot;https://x.com/metasploit&quot;&gt;@metasploit&lt;/a&gt; on X or &lt;a href=&quot;https://infosec.exchange/@metasploit&quot;&gt;@metasploit@infosec.exchange&lt;/a&gt; on Mastodon for updates&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Some community members may still use IRC channels and the metasploit-hackers mailing list, though the primary support channels are now GitHub Discussions and Slack.&lt;/p&gt; 
&lt;h2&gt;Installing Metasploit&lt;/h2&gt; 
&lt;h3&gt;Recommended Installation&lt;/h3&gt; 
&lt;p&gt;We recommend installation with the &lt;a href=&quot;https://docs.metasploit.com/docs/using-metasploit/getting-started/nightly-installers.html#installing-metasploit-on-linux--macos&quot;&gt;official Metasploit installers&lt;/a&gt; on Linux or macOS. Metasploit is also pre-installed with Kali.&lt;/p&gt; 
&lt;p&gt;For a manual setup, consult the &lt;a href=&quot;https://docs.metasploit.com/docs/development/get-started/setting-up-a-metasploit-development-environment.html&quot;&gt;Dev Environment Setup&lt;/a&gt; guide.&lt;/p&gt; 
&lt;h2&gt;Using Metasploit&lt;/h2&gt; 
&lt;p&gt;To get started with Metasploit:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Start &lt;code&gt;msfconsole&lt;/code&gt;:&lt;/strong&gt; This is the primary interface for interacting with Metasploit.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Explore Resources:&lt;/strong&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Visit the &lt;a href=&quot;https://docs.metasploit.com/docs/using-metasploit/getting-started/index.html&quot;&gt;Using Metasploit&lt;/a&gt; section of the documentation.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;To contribute to Metasploit:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Setup Development Environment:&lt;/strong&gt; Follow the instructions in the &lt;a href=&quot;https://docs.metasploit.com/docs/development/get-started/setting-up-a-metasploit-development-environment.html&quot;&gt;Development Setup Guide&lt;/a&gt; on GitHub.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Clone the Repository:&lt;/strong&gt; Obtain the source code from the official repository.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Submit a Pull Request:&lt;/strong&gt; After making changes, submit a pull request for review. Additional details can be found in the &lt;a href=&quot;https://github.com/rapid7/metasploit-framework/raw/master/CONTRIBUTING.md&quot;&gt;Contributing Guide&lt;/a&gt;.&lt;/li&gt; 
&lt;/ol&gt;</description>
      
    </item>
    
    <item>
      <title>discourse/discourse</title>
      <link>https://github.com/discourse/discourse</link>
      <description>&lt;p&gt;A platform for community discussion. Free, open, simple.&lt;/p&gt;&lt;hr&gt;&lt;a href=&quot;https://www.discourse.org/&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/discourse/discourse/main/images/discourse-readme-logo.png&quot; width=&quot;300px&quot; /&gt; &lt;/a&gt; 
&lt;p&gt;The online home for your community.&lt;/p&gt; 
&lt;img width=&quot;1920&quot; height=&quot;1135&quot; alt=&quot;github-readme&quot; src=&quot;https://github.com/user-attachments/assets/abaaf30f-0cfb-4505-a530-6f8e5a43d24b&quot; /&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;You can self-host Discourse on your own infrastructure. But if you&#39;d rather skip the setup, maintenance, and server management, we offer official Discourse hosting.&lt;/p&gt; 
 &lt;p&gt;👉 Learn more about &lt;a href=&quot;https://discourse.org/pricing&quot;&gt;Discourse hosting&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;Discourse is a 100% open-source community platform for those who want complete control over how and where their site is run.&lt;/p&gt; 
&lt;p&gt;Our platform has been battle-tested for over a decade and continues to evolve to meet users’ needs for a powerful community platform.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;With Discourse, you can:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;💬 &lt;strong&gt;Create discussion topics&lt;/strong&gt; to foster meaningful conversations.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;⚡️ &lt;strong&gt;Connect in real-time&lt;/strong&gt; with built-in chat.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;🎨 &lt;strong&gt;Customize your experience&lt;/strong&gt; with an ever-growing selection of official and community themes.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;🤖 &lt;strong&gt;Enhance your community&lt;/strong&gt; with plugins, from chatbots powered by &lt;a href=&quot;https://meta.discourse.org/t/discourse-ai/259214&quot;&gt;Discourse AI&lt;/a&gt; to advanced tools like SQL analysis with the &lt;a href=&quot;https://meta.discourse.org/t/discourse-data-explorer/32566&quot;&gt;Data Explorer&lt;/a&gt; plugin.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;To learn more, visit &lt;a href=&quot;https://www.discourse.org/&quot;&gt;discourse.org&lt;/a&gt; and join our support community at &lt;a href=&quot;https://meta.discourse.org/&quot;&gt;meta.discourse.org&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Here are just a few of the incredible communities using Discourse:&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/a79b5d56-7748-4f6d-8a2d-daa950366fcc&quot; alt=&quot;discourse-communities&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;👉 &lt;a href=&quot;https://discover.discourse.org/&quot;&gt;Discover more communities using Discourse&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Development&lt;/h2&gt; 
&lt;p&gt;To get your environment set up, follow one of the setup guides:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Docker 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://meta.discourse.org/t/336366&quot;&gt;Dev Container in VS Code&lt;/a&gt; (recommended)&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://meta.discourse.org/t/102009&quot;&gt;CLI&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://meta.discourse.org/t/15772&quot;&gt;macOS&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://meta.discourse.org/t/14727&quot;&gt;Ubuntu/Debian&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://meta.discourse.org/t/75149&quot;&gt;Windows&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Before you get started, ensure you have the following minimum versions: &lt;a href=&quot;https://www.ruby-lang.org/en/downloads/&quot;&gt;Ruby 3.4+&lt;/a&gt;, &lt;a href=&quot;https://www.postgresql.org/download/&quot;&gt;PostgreSQL 15&lt;/a&gt;, &lt;a href=&quot;https://redis.io/download&quot;&gt;Redis 7&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;For more information, check out &lt;a href=&quot;https://meta.discourse.org/c/documentation/developer-guides/56&quot;&gt;the Developer Documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Setting up Discourse&lt;/h2&gt; 
&lt;p&gt;If you want to set up a Discourse forum for production use, see our &lt;a href=&quot;https://raw.githubusercontent.com/discourse/discourse/main/docs/INSTALL.md&quot;&gt;&lt;strong&gt;Discourse Install Guide&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;If you&#39;re looking for official hosting, see &lt;a href=&quot;https://www.discourse.org/pricing/&quot;&gt;discourse.org/pricing&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Requirements&lt;/h2&gt; 
&lt;p&gt;Discourse supports the &lt;strong&gt;latest, stable releases&lt;/strong&gt; of all major browsers and platforms:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Browsers&lt;/th&gt; 
   &lt;th&gt;Tablets&lt;/th&gt; 
   &lt;th&gt;Phones&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Apple Safari&lt;/td&gt; 
   &lt;td&gt;iPadOS&lt;/td&gt; 
   &lt;td&gt;iOS&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Google Chrome&lt;/td&gt; 
   &lt;td&gt;Android&lt;/td&gt; 
   &lt;td&gt;Android&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Microsoft Edge&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Mozilla Firefox&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Additionally, we aim to support Safari on iOS 16.4+.&lt;/p&gt; 
&lt;h2&gt;Built With&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/rails/rails&quot;&gt;Ruby on Rails&lt;/a&gt; — Our back end API is a Rails app. It responds to requests RESTfully in JSON.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/emberjs/ember.js&quot;&gt;Ember.js&lt;/a&gt; — Our front end is an Ember.js app that communicates with the Rails API.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.postgresql.org/&quot;&gt;PostgreSQL&lt;/a&gt; — Our main data store is in Postgres.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://redis.io/&quot;&gt;Redis&lt;/a&gt; — We use Redis as a cache and for transient data.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.browserstack.com/&quot;&gt;BrowserStack&lt;/a&gt; — We use BrowserStack to test on real devices and browsers.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Plus &lt;em&gt;lots&lt;/em&gt; of Ruby Gems, a complete list of which is at &lt;a href=&quot;https://github.com/discourse/discourse/raw/main/Gemfile&quot;&gt;/main/Gemfile&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/discourse/discourse/actions&quot;&gt;&lt;img src=&quot;https://github.com/discourse/discourse/actions/workflows/tests.yml/badge.svg?sanitize=true&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Discourse is &lt;strong&gt;100% free&lt;/strong&gt; and &lt;strong&gt;open source&lt;/strong&gt;. We encourage and support an active, healthy community that accepts contributions from the public – including you!&lt;/p&gt; 
&lt;p&gt;Before contributing to Discourse:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Please read the complete mission statements on &lt;a href=&quot;https://www.discourse.org&quot;&gt;&lt;strong&gt;discourse.org&lt;/strong&gt;&lt;/a&gt;. Yes we actually believe this stuff; you should too.&lt;/li&gt; 
 &lt;li&gt;Read and sign the &lt;a href=&quot;https://www.discourse.org/cla&quot;&gt;&lt;strong&gt;Electronic Discourse Forums Contribution License Agreement&lt;/strong&gt;&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Dig into &lt;a href=&quot;https://raw.githubusercontent.com/discourse/discourse/main/CONTRIBUTING.md&quot;&gt;&lt;strong&gt;CONTRIBUTING.MD&lt;/strong&gt;&lt;/a&gt;, which covers submitting bugs, requesting new features, preparing your code for a pull request, etc.&lt;/li&gt; 
 &lt;li&gt;Always strive to collaborate &lt;a href=&quot;https://github.com/discourse/discourse/raw/main/docs/code-of-conduct.md&quot;&gt;with mutual respect&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Not sure what to work on? &lt;a href=&quot;https://meta.discourse.org/t/so-you-want-to-help-out-with-discourse/3823&quot;&gt;&lt;strong&gt;We&#39;ve got some ideas.&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;We look forward to seeing your pull requests!&lt;/p&gt; 
&lt;h2&gt;Security&lt;/h2&gt; 
&lt;p&gt;We take security very seriously at Discourse; all our code is 100% open source and peer reviewed. Please read &lt;a href=&quot;https://github.com/discourse/discourse/raw/main/docs/SECURITY.md&quot;&gt;our security guide&lt;/a&gt; for an overview of security measures in Discourse, or if you wish to report a security issue.&lt;/p&gt; 
&lt;p&gt;Security fixes are listed in the &lt;a href=&quot;https://releases.discourse.org&quot;&gt;release notes&lt;/a&gt; for each version.&lt;/p&gt; 
&lt;h2&gt;The Discourse Team&lt;/h2&gt; 
&lt;p&gt;The original Discourse code contributors can be found in &lt;a href=&quot;https://raw.githubusercontent.com/discourse/discourse/main/docs/AUTHORS.md&quot;&gt;&lt;strong&gt;AUTHORS.MD&lt;/strong&gt;&lt;/a&gt;. For a complete list of the many individuals that contributed to the design and implementation of Discourse, please refer to &lt;a href=&quot;https://blog.discourse.org/2013/02/the-discourse-team/&quot;&gt;the official Discourse blog&lt;/a&gt; and &lt;a href=&quot;https://github.com/discourse/discourse/contributors&quot;&gt;GitHub&#39;s list of contributors&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Copyright / License&lt;/h2&gt; 
&lt;p&gt;Copyright 2014 - 2026 Civilized Discourse Construction Kit, Inc.&lt;/p&gt; 
&lt;p&gt;Licensed under the GNU General Public License Version 2.0 (or later); you may not use this work except in compliance with the License. You may obtain a copy of the License in the LICENSE file, or at:&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt&quot;&gt;https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.&lt;/p&gt; 
&lt;p&gt;Discourse logo and “Discourse Forum” ®, Civilized Discourse Construction Kit, Inc.&lt;/p&gt; 
&lt;h2&gt;Accessibility&lt;/h2&gt; 
&lt;p&gt;To guide our ongoing effort to build accessible software we follow the &lt;a href=&quot;https://www.w3.org/TR/WCAG21/&quot;&gt;W3C’s Web Content Accessibility Guidelines (WCAG)&lt;/a&gt;. If you&#39;d like to report an accessibility issue that makes it difficult for you to use Discourse, email &lt;a href=&quot;mailto:accessibility@discourse.org&quot;&gt;accessibility@discourse.org&lt;/a&gt;. For more information visit &lt;a href=&quot;https://discourse.org/accessibility&quot;&gt;discourse.org/accessibility&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Dedication&lt;/h2&gt; 
&lt;p&gt;Discourse is built with &lt;a href=&quot;https://www.youtube.com/watch?v=Xe1TZaElTAs&quot;&gt;love, Internet style.&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;For over a decade, our &lt;a href=&quot;https://meta.discourse.org/&quot;&gt;amazing community&lt;/a&gt; has helped shape Discourse into what it is today. Your support, feedback, and contributions have been invaluable in making Discourse a powerful and versatile platform.&lt;/p&gt; 
&lt;p&gt;We’re deeply grateful for every feature request, bug report, and discussion that has driven Discourse forward. Thank you for being a part of this journey—we couldn’t have done it without you!&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Freika/dawarich</title>
      <link>https://github.com/Freika/dawarich</link>
      <description>&lt;p&gt;Your favorite self-hostable alternative to Google Timeline (Google Location History)&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;🌍 Dawarich: Your Self-Hostable Location History Tracker&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://discord.gg/pHsBjpt5J8&quot;&gt;&lt;img src=&quot;https://dcbadge.limes.pink/api/server/pHsBjpt5J8&quot; alt=&quot;Discord&quot; /&gt;&lt;/a&gt; | &lt;a href=&quot;https://ko-fi.com/H2H3IDYDD&quot;&gt;&lt;img src=&quot;https://ko-fi.com/img/githubbutton_sm.svg?sanitize=true&quot; alt=&quot;ko-fi&quot; /&gt;&lt;/a&gt; | &lt;a href=&quot;https://www.patreon.com/freika&quot;&gt;&lt;img src=&quot;https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3Dfreika%26type%3Dpatrons&amp;amp;style=for-the-badge&quot; alt=&quot;Patreon&quot; /&gt;&lt;/a&gt; | &lt;a href=&quot;https://app.instapods.com/dashboard/pods/create?app=dawarich&amp;amp;ref=dawarich&quot;&gt;&lt;img src=&quot;https://instapods.com/deploy-button.svg?sanitize=true&quot; alt=&quot;Deploy on InstaPods&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Screenshots&lt;/h2&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Freika/dawarich/master/screenshots/map.png&quot; alt=&quot;Map&quot; /&gt; &lt;em&gt;Map View&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Freika/dawarich/master/screenshots/timeline.png&quot; alt=&quot;Timeline&quot; /&gt; &lt;em&gt;Timeline View&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Freika/dawarich/master/screenshots/insights.png&quot; alt=&quot;Insights&quot; /&gt; &lt;em&gt;Insights Page&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Freika/dawarich/master/screenshots/family.png&quot; alt=&quot;Family&quot; /&gt; &lt;em&gt;Family Page&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Freika/dawarich/master/screenshots/stats.png&quot; alt=&quot;Stats&quot; /&gt; &lt;em&gt;Statistics Overview&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Freika/dawarich/master/screenshots/trips.png&quot; alt=&quot;Trips&quot; /&gt; &lt;em&gt;Trips page&lt;/em&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;About Dawarich&lt;/h2&gt; 
&lt;p&gt;If you&#39;re looking for Dawarich Cloud, where everything is managed for you, check out &lt;a href=&quot;https://dawarich.app&quot;&gt;Dawarich Cloud&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Dawarich&lt;/strong&gt; is a self-hostable web app designed to replace Google Timeline (aka Google Location History). It enables you to:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Track your location history.&lt;/li&gt; 
 &lt;li&gt;Visualize your data on an interactive map.&lt;/li&gt; 
 &lt;li&gt;Create trips and analyze your travel history.&lt;/li&gt; 
 &lt;li&gt;Share your location with family members.&lt;/li&gt; 
 &lt;li&gt;Integrate with photo management apps like Immich and Photoprism to visualize geotagged photos.&lt;/li&gt; 
 &lt;li&gt;Import your location history from Google Maps Timeline, OwnTracks, GPX, GeoJSON and some other sources&lt;/li&gt; 
 &lt;li&gt;Explore statistics like the number of countries and cities visited, total distance traveled, and more!&lt;/li&gt; 
 &lt;li&gt;Share your location with family members.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Changelog&lt;/strong&gt;: Find the latest updates &lt;a href=&quot;https://raw.githubusercontent.com/Freika/dawarich/master/CHANGELOG.md&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;&lt;strong&gt;Contribute&lt;/strong&gt;: See &lt;a href=&quot;https://raw.githubusercontent.com/Freika/dawarich/master/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; for how to contribute to Dawarich.&lt;/h2&gt; 
&lt;h2&gt;⚠️ Disclaimer&lt;/h2&gt; 
&lt;h3&gt;Updating strategy&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;DO NOT UPDATE AUTOMATICALLY&lt;/strong&gt;: Read release notes before updating. Automatic updates may break your setup.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Under active development&lt;/strong&gt;: Expect frequent updates, bugs, and breaking changes.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Do not delete your original data&lt;/strong&gt; after importing into Dawarich.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Backup before updates&lt;/strong&gt;: Always &lt;a href=&quot;https://dawarich.app/docs/tutorials/backup-and-restore&quot;&gt;backup your data&lt;/a&gt; before upgrading.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Stay up-to-date&lt;/strong&gt;: Make sure you&#39;re running the latest version for the best experience.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🧭 Supported Location Tracking&lt;/h2&gt; 
&lt;p&gt;You can track your location with the following apps:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;💫 &lt;a href=&quot;https://dawarich.app/docs/dawarich-for-ios/&quot;&gt;Dawarich for iOS&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;🤖 &lt;a href=&quot;https://dawarich.app/docs/dawarich-for-android/&quot;&gt;Dawarich for Android&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;🗺️ &lt;a href=&quot;https://github.com/sunstep/dawarich-android&quot;&gt;Dawarich Community&lt;/a&gt; (Android)&lt;/li&gt; 
 &lt;li&gt;🌍 &lt;a href=&quot;https://dawarich.app/docs/tutorials/track-your-location#overland&quot;&gt;Overland&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;🛰️ &lt;a href=&quot;https://dawarich.app/docs/tutorials/track-your-location#owntracks&quot;&gt;OwnTracks&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;🧭 &lt;a href=&quot;https://dawarich.app/docs/tutorials/track-your-location#gps-logger&quot;&gt;GPSLogger&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;📱 &lt;a href=&quot;https://dawarich.app/docs/tutorials/track-your-location#phonetrack&quot;&gt;PhoneTrack&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;🏡 &lt;a href=&quot;https://dawarich.app/docs/tutorials/track-your-location#home-assistant&quot;&gt;Home Assistant&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Simply install one of the supported apps on your device and configure it to send location updates to your Dawarich instance.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;How to Start Dawarich Locally&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;Clone the repository.&lt;/li&gt; 
 &lt;li&gt;Run the following command to start the app:&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker compose -f docker/docker-compose.yml up
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Access the app at &lt;code&gt;http://localhost:3000&lt;/code&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;strong&gt;To stop the app&lt;/strong&gt;, press &lt;code&gt;Ctrl+C&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;You can use default values or create a &lt;code&gt;.env&lt;/code&gt; file based on &lt;code&gt;.env.example&lt;/code&gt; to customize your setup.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;How to Install Dawarich&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://dawarich.app/docs/intro#setup-your-dawarich-instance&quot;&gt;Docker Setup&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://dawarich.app/docs/tutorials/platforms/synology&quot;&gt;Synology&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Default Credentials&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Username&lt;/strong&gt;: &lt;code&gt;demo@dawarich.app&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Password&lt;/strong&gt;: &lt;code&gt;safepassword&lt;/code&gt; Feel free to change them in the account settings.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;h3&gt;Location Tracking&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Track your live location using one of the &lt;a href=&quot;https://raw.githubusercontent.com/Freika/dawarich/master/#-supported-location-tracking&quot;&gt;supported apps&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Location History Visualization&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;View your historical data on a map with customizable layers: 
  &lt;ul&gt; 
   &lt;li&gt;Heatmap&lt;/li&gt; 
   &lt;li&gt;Points&lt;/li&gt; 
   &lt;li&gt;Lines between points&lt;/li&gt; 
   &lt;li&gt;Fog of War&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Family Sharing&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Share your location with family members.&lt;/li&gt; 
 &lt;li&gt;View locations of family members on the map (with their consent).&lt;/li&gt; 
 &lt;li&gt;Each family member can enable or disable location sharing individually.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Areas&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Draw areas on the map so Dawarich could suggest your visits there.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Visits (Beta)&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Dawarich can suggest places you&#39;ve visited and allow you to confirm or reject them.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Statistics&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Analyze your travel history: number of countries/cities visited, distance traveled, and time spent, broken down by year and month.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Insights&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Get insights about your location history, like &quot;Your most visited place is home, with 120 visits&quot;, or &quot;You spent 30 days in Paris in 2024&quot;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Days in country&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;See how many days you&#39;ve spent in each country. Useful for tax residency purposes or just to see where you spend most of your time.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Trips&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Create a trip to visualize your travels between two points in time. You&#39;ll be able to see the route, distance, and time spent, and also add notes to your trip. If you have Immich or Photoprism integration, you&#39;ll also be able to see photos from your trips!&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Integrations&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Provide credentials for Immich or Photoprism (or both!) and Dawarich will automatically import geodata from your photos.&lt;/li&gt; 
 &lt;li&gt;You&#39;ll also be able to visualize your photos on the map!&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Import Your Data&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Import from various sources: 
  &lt;ul&gt; 
   &lt;li&gt;Google Maps Timeline&lt;/li&gt; 
   &lt;li&gt;OwnTracks&lt;/li&gt; 
   &lt;li&gt;Strava&lt;/li&gt; 
   &lt;li&gt;Immich&lt;/li&gt; 
   &lt;li&gt;GPX/GeoJSON files&lt;/li&gt; 
   &lt;li&gt;Photos’ EXIF data&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Export Your Data&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Export your data to GeoJSON or GPX formats.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📚 Guides and Tutorials&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://dawarich.app/docs/tutorials/reverse-proxy&quot;&gt;Set up Reverse Proxy&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://dawarich.app/docs/tutorials/import-existing-data#sources-of-data&quot;&gt;Import Google Takeout&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://dawarich.app/docs/tutorials/track-your-location#overland&quot;&gt;Track Location with Overland&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://dawarich.app/docs/tutorials/track-your-location#owntracks&quot;&gt;Track Location with OwnTracks&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://dawarich.app/docs/tutorials/export-your-data&quot;&gt;Export Your Data&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;More guides available in the &lt;a href=&quot;https://dawarich.app/docs/intro&quot;&gt;Docs&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Environment Variables&lt;/h2&gt; 
&lt;p&gt;Check the documentation on the &lt;a href=&quot;https://dawarich.app/docs/environment-variables-and-settings&quot;&gt;website&lt;/a&gt; for detailed information about environment variables and settings.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Star History&lt;/h2&gt; 
&lt;p&gt;As you could probably guess, I like statistics.&lt;/p&gt; 
&lt;a href=&quot;https://star-history.com/#Freika/dawarich&amp;amp;Date&quot;&gt; 
 &lt;picture&gt; 
  &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;https://api.star-history.com/svg?repos=Freika/dawarich&amp;amp;type=Date&amp;amp;theme=dark&quot; /&gt; 
  &lt;source media=&quot;(prefers-color-scheme: light)&quot; srcset=&quot;https://api.star-history.com/svg?repos=Freika/dawarich&amp;amp;type=Date&quot; /&gt; 
  &lt;img alt=&quot;Star History Chart&quot; src=&quot;https://api.star-history.com/svg?repos=Freika/dawarich&amp;amp;type=Date&quot; /&gt; 
 &lt;/picture&gt; &lt;/a&gt;</description>
      
    </item>
    
    <item>
      <title>ruby/ruby</title>
      <link>https://github.com/ruby/ruby</link>
      <description>&lt;p&gt;The Ruby Programming Language&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/ruby/ruby/actions?query=workflow%3A%22MinGW%22&quot;&gt;&lt;img src=&quot;https://github.com/ruby/ruby/workflows/MinGW/badge.svg?sanitize=true&quot; alt=&quot;Actions Status: MinGW&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/ruby/ruby/actions?query=workflow%3A%22Ubuntu%22&quot;&gt;&lt;img src=&quot;https://github.com/ruby/ruby/workflows/Ubuntu/badge.svg?sanitize=true&quot; alt=&quot;Actions Status: Ubuntu&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/ruby/ruby/actions?query=workflow%3A%22Windows%22&quot;&gt;&lt;img src=&quot;https://github.com/ruby/ruby/workflows/Windows/badge.svg?sanitize=true&quot; alt=&quot;Actions Status: Windows&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://app.travis-ci.com/ruby/ruby&quot;&gt;&lt;img src=&quot;https://app.travis-ci.com/ruby/ruby.svg?branch=master&quot; alt=&quot;Travis Status&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;rdoc-ref:README.ja.md&quot;&gt;日本語&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;What is Ruby?&lt;/h1&gt; 
&lt;p&gt;Ruby is an interpreted object-oriented programming language often used for web development. It also offers many scripting features to process plain text and serialized files, or manage system tasks. It is simple, straightforward, and extensible.&lt;/p&gt; 
&lt;h2&gt;Features of Ruby&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Simple Syntax&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Normal&lt;/strong&gt; Object-oriented Features (e.g. class, method calls)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Advanced&lt;/strong&gt; Object-oriented Features (e.g. mix-in, singleton-method)&lt;/li&gt; 
 &lt;li&gt;Operator Overloading&lt;/li&gt; 
 &lt;li&gt;Exception Handling&lt;/li&gt; 
 &lt;li&gt;Iterators and Closures&lt;/li&gt; 
 &lt;li&gt;Garbage Collection&lt;/li&gt; 
 &lt;li&gt;Dynamic Loading of Object Files (on some architectures)&lt;/li&gt; 
 &lt;li&gt;Highly Portable (works on many Unix-like/POSIX compatible platforms as well as Windows, macOS, etc.) cf. &lt;a href=&quot;https://docs.ruby-lang.org/en/master/maintainers_md.html#label-Platform+Maintainers&quot;&gt;https://docs.ruby-lang.org/en/master/maintainers_md.html#label-Platform+Maintainers&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;How to get Ruby&lt;/h2&gt; 
&lt;p&gt;For a complete list of ways to install Ruby, including using third-party tools like rvm, see:&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.ruby-lang.org/en/downloads/&quot;&gt;https://www.ruby-lang.org/en/downloads/&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;You can download release packages and the snapshot of the repository. If you want to download whole versions of Ruby, please visit &lt;a href=&quot;https://www.ruby-lang.org/en/downloads/releases/&quot;&gt;https://www.ruby-lang.org/en/downloads/releases/&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Download with Git&lt;/h3&gt; 
&lt;p&gt;The mirror of the Ruby source tree can be checked out with the following command:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ git clone https://github.com/ruby/ruby.git
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;There are some other branches under development. Try the following command to see the list of branches:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ git ls-remote https://github.com/ruby/ruby.git
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You may also want to use &lt;a href=&quot;https://git.ruby-lang.org/ruby.git&quot;&gt;https://git.ruby-lang.org/ruby.git&lt;/a&gt; (actual master of Ruby source) if you are a committer.&lt;/p&gt; 
&lt;h2&gt;How to build&lt;/h2&gt; 
&lt;p&gt;See &lt;a href=&quot;https://docs.ruby-lang.org/en/master/contributing/building_ruby_md.html&quot;&gt;Building Ruby&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Ruby home page&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.ruby-lang.org/&quot;&gt;https://www.ruby-lang.org/&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.ruby-lang.org/en/master/index.html&quot;&gt;English&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.ruby-lang.org/ja/master/index.html&quot;&gt;Japanese&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Mailing list&lt;/h2&gt; 
&lt;p&gt;There is a mailing list to discuss Ruby. To subscribe to this list, please send the following phrase:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;join
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;in the mail subject (not body) to the address &lt;a href=&quot;mailto:ruby-talk-request@ml.ruby-lang.org?subject=join&quot;&gt;ruby-talk-request@ml.ruby-lang.org&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Copying&lt;/h2&gt; 
&lt;p&gt;See the file &lt;a href=&quot;rdoc-ref:COPYING&quot;&gt;COPYING&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Feedback&lt;/h2&gt; 
&lt;p&gt;Questions about the Ruby language can be asked on the &lt;a href=&quot;https://www.ruby-lang.org/en/community/mailing-lists&quot;&gt;Ruby-Talk&lt;/a&gt; mailing list or on websites like &lt;a href=&quot;https://stackoverflow.com&quot;&gt;https://stackoverflow.com&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Bugs should be reported at &lt;a href=&quot;https://bugs.ruby-lang.org&quot;&gt;https://bugs.ruby-lang.org&lt;/a&gt;. Read &lt;a href=&quot;https://docs.ruby-lang.org/en/master/contributing/reporting_issues_md.html&quot;&gt;&quot;Reporting Issues&quot;&lt;/a&gt; for more information.&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;See &lt;a href=&quot;https://docs.ruby-lang.org/en/master/contributing/contributing_md.html&quot;&gt;&quot;Contributing to Ruby&quot;&lt;/a&gt;, which includes setup and build instructions.&lt;/p&gt; 
&lt;h2&gt;The Author&lt;/h2&gt; 
&lt;p&gt;Ruby was originally designed and developed by Yukihiro Matsumoto (Matz) in 1995.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;mailto:matz@ruby-lang.org&quot;&gt;matz@ruby-lang.org&lt;/a&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Homebrew/homebrew-cask</title>
      <link>https://github.com/Homebrew/homebrew-cask</link>
      <description>&lt;p&gt;🍻 Default casks (upstream binary packages) for the package manager for everywhere&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Homebrew Cask&lt;/h1&gt; 
&lt;p&gt;&lt;em&gt;“To install, drag this icon…” no more!&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;Homebrew Cask extends &lt;a href=&quot;https://brew.sh&quot;&gt;Homebrew&lt;/a&gt; and brings its elegance, simplicity, and speed to the installation and management of prebuilt software artifacts distributed by upstream vendors, including GUI applications, CLI tools, fonts, plugins, and other packaged software.&lt;/p&gt; 
&lt;p&gt;We do this by providing a friendly CLI workflow for the administration of these artifacts on macOS and Linux.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/orgs/Homebrew/discussions/categories/casks&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/github-discussions-informational&quot; alt=&quot;Join us on GitHub discussions&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Let’s try it!&lt;/h2&gt; 
&lt;p&gt;To start using Homebrew Cask, you just need &lt;a href=&quot;https://brew.sh&quot;&gt;Homebrew&lt;/a&gt; installed.&lt;/p&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;img src=&quot;https://raw.githubusercontent.com/Homebrew/homebrew-cask/main/doc/readme/readme-gif.gif&quot; width=&quot;450&quot; alt=&quot;Installing and uninstalling Alfred (animated gif)&quot; /&gt; 
&lt;/div&gt; 
&lt;p&gt;Slower, now:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;% brew install alfred
==&amp;gt; Fetching downloads for: alfred
✔︎ Cask alfred (5.7.2,2312)                                           Verified      5.6MB/  5.6MB
==&amp;gt; Installing Cask alfred
==&amp;gt; Moving App &#39;Alfred 5.app&#39; to &#39;/Applications/Alfred 5.app&#39;
🍺  alfred was successfully installed!
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;And there we have it. An application installed with one quick command: no clicking, no dragging, no dropping.&lt;/p&gt; 
&lt;h2&gt;Learn More&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Find basic documentation on using Homebrew Cask in &lt;a href=&quot;https://raw.githubusercontent.com/Homebrew/homebrew-cask/main/USAGE.md&quot;&gt;USAGE.md&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Want to contribute a cask? Awesome! See &lt;a href=&quot;https://raw.githubusercontent.com/Homebrew/homebrew-cask/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;More project-related details and discussion are available in the &lt;a href=&quot;https://docs.brew.sh/Adding-Software-to-Homebrew#casks&quot;&gt;documentation&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Reporting Bugs&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Homebrew/homebrew-cask/main/doc/faq/closing_issues_without_review.md&quot;&gt;&lt;strong&gt;If you ignore this guide, your issue may be closed without review&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Before reporting a bug, run &lt;code&gt;brew update-reset &amp;amp;&amp;amp; brew update&lt;/code&gt; and try your command again. This is a fix-all that will reset the state of all your taps, ensuring the problem isn’t an outdated setup on your side.&lt;/p&gt; 
&lt;p&gt;If your issue persists, &lt;a href=&quot;https://github.com/Homebrew/homebrew-cask/search?type=Issues&quot;&gt;search for it&lt;/a&gt; before opening a new one. If you find an open issue and have any new information, add it in a comment. If you find a closed issue, try the solutions there.&lt;/p&gt; 
&lt;p&gt;If the issue is still not solved, see the guides for common problems:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Homebrew/homebrew-cask/main/doc/reporting_bugs/error_examples.md&quot;&gt;Examples of common errors and their solutions&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Homebrew/homebrew-cask/main/doc/reporting_bugs/error_examples.md#curl-error&quot;&gt;&lt;code&gt;curl&lt;/code&gt; error&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Homebrew/homebrew-cask/main/doc/reporting_bugs/error_examples.md#permission-denied-error&quot;&gt;&lt;code&gt;Permission denied&lt;/code&gt; error&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Homebrew/homebrew-cask/main/doc/reporting_bugs/error_examples.md#checksum-does-not-match-error&quot;&gt;&lt;code&gt;Checksum does not match&lt;/code&gt; error&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Homebrew/homebrew-cask/main/doc/reporting_bugs/error_examples.md#source-is-not-there-error&quot;&gt;&lt;code&gt;source is not there&lt;/code&gt; error&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Homebrew/homebrew-cask/main/doc/reporting_bugs/error_examples.md#wrong-number-of-arguments-error&quot;&gt;&lt;code&gt;wrong number of arguments&lt;/code&gt; error&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.brew.sh/FAQ#why-arent-some-apps-included-during-brew-upgrade&quot;&gt;App isn’t included in &lt;code&gt;upgrade&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.brew.sh/FAQ#why-cant-i-open-a-mac-app-from-an-unidentified-developer&quot;&gt;The app can’t be opened because it is from an unidentified developer&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Homebrew/homebrew-cask/issues/new?template=01_bug_report.yml&quot;&gt;My problem isn’t listed&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Requests&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Issues requesting new casks will be closed. If you want a cask added to the main repositories, &lt;a href=&quot;https://github.com/Homebrew/homebrew-cask/raw/HEAD/CONTRIBUTING.md#adding-a-cask&quot;&gt;submit a pull request&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;For a feature request, &lt;a href=&quot;https://github.com/Homebrew/brew/issues/new?assignees=&amp;amp;labels=features&amp;amp;projects=&amp;amp;template=feature.yml&quot;&gt;use this template&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Questions? Wanna chat?&lt;/h2&gt; 
&lt;p&gt;We’re really rather friendly! Here are the best places to talk about the project:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Homebrew/homebrew-cask/issues/new/choose&quot;&gt;Open an issue&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Join us on &lt;a href=&quot;https://github.com/orgs/Homebrew/discussions/categories/casks&quot;&gt;GitHub discussions (forum)&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;Code is under the &lt;a href=&quot;https://raw.githubusercontent.com/Homebrew/homebrew-cask/main/LICENSE&quot;&gt;BSD 2 Clause (NetBSD) license&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>github/explore</title>
      <link>https://github.com/github/explore</link>
      <description>&lt;p&gt;Community-curated topic and collection pages on GitHub&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;GitHub Explore&lt;/h1&gt; 
&lt;p&gt;This repository houses all of the community-curated content for GitHub Topics and Collections.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://help.github.com/articles/about-topics/&quot;&gt;Topics&lt;/a&gt; help you explore repositories in a particular subject area, learn more about that subject, and find projects to contribute to.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/collections&quot;&gt;Collections&lt;/a&gt; help you discover hand-picked repositories, developers, organizations, videos, and articles that share a common theme.&lt;/p&gt; 
&lt;p&gt;If you want to suggest edits to an existing Topic page or Collection, or curate a new one, read our &lt;a href=&quot;https://raw.githubusercontent.com/github/explore/main/CONTRIBUTING.md&quot;&gt;contributing guide&lt;/a&gt; to get started.&lt;/p&gt; 
&lt;h2&gt;Running tests&lt;/h2&gt; 
&lt;p&gt;There are some lint tests in place to ensure each Topic is formatted in the way we expect. GitHub Actions will run the tests automatically. If you want to run the tests yourself locally, you will need Ruby and Bundler installed.&lt;/p&gt; 
&lt;p&gt;You can run the tests using:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bundle install
bundle exec rubocop
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Licenses&lt;/h2&gt; 
&lt;p&gt;Content is released under &lt;a href=&quot;https://creativecommons.org/licenses/by/4.0/&quot;&gt;CC-BY-4.0&lt;/a&gt; which gives you permission to use content for almost any purpose (but does not grant you any trademark permissions). See &lt;a href=&quot;https://raw.githubusercontent.com/github/explore/main/notices.md&quot;&gt;notices&lt;/a&gt; for complete details, including attribution guidelines, contribution terms, and software and third-party licenses and permissions.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>antiwork/gumroad</title>
      <link>https://github.com/antiwork/gumroad</link>
      <description>&lt;p&gt;See what sticks&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; 
 &lt;picture&gt; 
  &lt;source srcset=&quot;https://public-files.gumroad.com/logo/gumroad-dark.svg&quot; media=&quot;(prefers-color-scheme: dark)&quot; /&gt; 
  &lt;source srcset=&quot;https://public-files.gumroad.com/logo/gumroad.svg&quot; media=&quot;(prefers-color-scheme: light)&quot; /&gt; 
  &lt;img src=&quot;https://public-files.gumroad.com/logo/gumroad.svg?sanitize=true&quot; width=&quot;714&quot; alt=&quot;Gumroad logo&quot; /&gt; 
 &lt;/picture&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;strong&gt;See what sticks.&lt;/strong&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://gumroad.com&quot;&gt;Gumroad&lt;/a&gt; is an e-commerce platform that enables creators to sell products directly to consumers. This repository contains the source code for the Gumroad web application. &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://github.com/antiwork/gumroad-cli&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/CLI-gumroad--cli-FF90E8?style=for-the-badge&quot; alt=&quot;Gumroad CLI&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;We don&#39;t run an inbound review queue on this repo. To contribute a change: &lt;strong&gt;fork the repo, open the pull request on your own fork, then email &lt;a href=&quot;mailto:support@gumroad.com&quot;&gt;support@gumroad.com&lt;/a&gt; with a link to it.&lt;/strong&gt; We read every submission and merge the ones we want on our side, keeping your authorship — though we can&#39;t promise a reply to each one or a timeline.&lt;/p&gt; 
&lt;p&gt;Your PR still has to meet the same bar as our own work — visual evidence for anything user-facing, QA steps, test results, and an AI disclosure naming the model. See &lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; for the full guidelines and the substitutions that apply when working from a fork.&lt;/p&gt; 
&lt;h2&gt;Table of Contents&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/#contributing&quot;&gt;Contributing&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/#getting-started&quot;&gt;Getting Started&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/#prerequisites&quot;&gt;Prerequisites&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/#installation&quot;&gt;Installation&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/#configuration&quot;&gt;Configuration&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/#running-locally&quot;&gt;Running Locally&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/#testing&quot;&gt;Testing&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/#dependencies&quot;&gt;Dependencies&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/#integration-tests&quot;&gt;Integration tests&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/#development&quot;&gt;Development&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/#logging-in&quot;&gt;Logging in&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/#resetting-elasticsearch-indices&quot;&gt;Resetting Elasticsearch indices&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/#push-notifications&quot;&gt;Push Notifications&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/#common-development-tasks&quot;&gt;Common Development Tasks&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/#linting&quot;&gt;Linting&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;h3&gt;Prerequisites&lt;/h3&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;💡 If you&#39;re on Windows, follow our &lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/docs/development/windows.md&quot;&gt;Windows setup guide&lt;/a&gt; instead.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;Before you begin, ensure you have the following installed:&lt;/p&gt; 
&lt;h4&gt;Ruby&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.ruby-lang.org/en/documentation/installation/&quot;&gt;https://www.ruby-lang.org/en/documentation/installation/&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Install the version listed in &lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/.ruby-version&quot;&gt;the .ruby-version file&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Node.js&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://nodejs.org/en/download&quot;&gt;https://nodejs.org/en/download&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Install the version listed in &lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/.node-version&quot;&gt;the .node-version file&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Docker&lt;/h4&gt; 
&lt;p&gt;We use Docker to setup the services for development environment.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;For MacOS: Download the Docker app from the &lt;a href=&quot;https://www.docker.com/products/docker-desktop&quot;&gt;Docker website&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;For Linux:&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo wget -qO- https://get.docker.com/ | sh
sudo usermod -aG docker $(whoami)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;MySQL &amp;amp; Percona Toolkit&lt;/h4&gt; 
&lt;p&gt;Install a local version of MySQL 8.0.x to match the version running in production.&lt;/p&gt; 
&lt;p&gt;The local version of MySQL is a dependency of the Ruby &lt;code&gt;mysql2&lt;/code&gt; gem. You do not need to start an instance of the MySQL service locally. The app will connect to a MySQL instance running in the Docker container.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;For MacOS:&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;brew install mysql@8.0 percona-toolkit
brew link --force mysql@8.0

# to use Homebrew&#39;s `openssl`:
brew install openssl
bundle config --global build.mysql2 --with-opt-dir=&quot;$(brew --prefix openssl)&quot;

# ensure MySQL is not running as a service
brew services stop mysql@8.0
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&gt; 
 &lt;li&gt;For Linux: 
  &lt;ul&gt; 
   &lt;li&gt;MySQL: 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/linux-installation.html&quot;&gt;https://dev.mysql.com/doc/refman/8.0/en/linux-installation.html&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;code&gt;apt install libmysqlclient-dev&lt;/code&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;Percona Toolkit: &lt;a href=&quot;https://www.percona.com/doc/percona-toolkit/LATEST/installation.html&quot;&gt;https://www.percona.com/doc/percona-toolkit/LATEST/installation.html&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Image Processing Libraries&lt;/h4&gt; 
&lt;h5&gt;ImageMagick&lt;/h5&gt; 
&lt;p&gt;We use &lt;code&gt;imagemagick&lt;/code&gt; for preview editing.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;For MacOS: &lt;code&gt;brew install imagemagick&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;For Linux: &lt;code&gt;sudo apt-get install imagemagick&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h5&gt;libvips&lt;/h5&gt; 
&lt;p&gt;For newer image formats we use &lt;code&gt;libvips&lt;/code&gt; for image processing with ActiveStorage.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;For MacOS: &lt;code&gt;brew install libvips&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;For Linux: &lt;code&gt;sudo apt-get install libvips-dev&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;FFmpeg&lt;/h4&gt; 
&lt;p&gt;We use &lt;code&gt;ffprobe&lt;/code&gt; that comes with &lt;code&gt;FFmpeg&lt;/code&gt; package to fetch metadata from video files.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;For MacOS: &lt;code&gt;brew install ffmpeg&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;For Linux: &lt;code&gt;sudo apt-get install ffmpeg&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;PDFtk&lt;/h4&gt; 
&lt;p&gt;We use &lt;a href=&quot;https://www.pdflabs.com/tools/pdftk-server/&quot;&gt;pdftk&lt;/a&gt; to stamp PDF files with the Gumroad logo and the buyers&#39; emails.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;For MacOS: Download from &lt;a href=&quot;https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk_server-2.02-mac_osx-10.11-setup.pkg&quot;&gt;here&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;strong&gt;Note:&lt;/strong&gt; pdftk may be blocked by Apple&#39;s firewall. If this happens, go to Settings &amp;gt; Privacy &amp;amp; Security and click &quot;Open Anyways&quot; to allow the installation.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;For Linux: &lt;code&gt;sudo apt-get install pdftk&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;wkhtmltopdf&lt;/h4&gt; 
&lt;p&gt;While generating invoices, to convert HTML to PDF, PDFKit expects &lt;a href=&quot;https://wkhtmltopdf.org/&quot;&gt;wkhtmltopdf&lt;/a&gt; to be installed on your system. &lt;a href=&quot;https://wkhtmltopdf.org/downloads.html&quot;&gt;Download&lt;/a&gt; and install the version 0.12.6 for your platform.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Note&lt;/strong&gt; similar to pdftk, this may also be blocked by Apple&#39;s firewall on MacOS. Follow a similar process as above.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Installation&lt;/h3&gt; 
&lt;h4&gt;Bundler and gems&lt;/h4&gt; 
&lt;p&gt;We use Bundler to install Ruby gems.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;gem install bundler
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Install gems:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;bundle install
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Also make sure to install &lt;code&gt;dotenv&lt;/code&gt; as it is required for some console commands:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;gem install dotenv
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;npm and Node.js dependencies&lt;/h4&gt; 
&lt;p&gt;Make sure the correct version of &lt;code&gt;npm&lt;/code&gt; is enabled:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;corepack enable
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Install dependencies:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;npm install
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Configuration&lt;/h3&gt; 
&lt;h4&gt;Set up Custom credentials&lt;/h4&gt; 
&lt;p&gt;App can be booted without any custom credentials. But if you would like to use services that require custom credentials (e.g. S3, Stripe, Resend, etc.), you can copy the &lt;code&gt;.env.example&lt;/code&gt; file to &lt;code&gt;.env&lt;/code&gt; and fill in the values.&lt;/p&gt; 
&lt;h3&gt;Running Locally&lt;/h3&gt; 
&lt;h4&gt;Start Docker services&lt;/h4&gt; 
&lt;p&gt;If you installed Docker Desktop (on a Mac or Windows machine), you can run the following command to start the Docker services:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;make local
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you are on Linux, or installed Docker via a package manager on a mac, you may need superuser access to expose container ports. To do that, use &lt;code&gt;sudo make local&lt;/code&gt; instead.&lt;/p&gt; 
&lt;p&gt;This command will not terminate. You run this in one tab and start the application in another tab. If you want to run Docker services in the background, use &lt;code&gt;LOCAL_DETACHED=true make local&lt;/code&gt; instead.&lt;/p&gt; 
&lt;h4&gt;Set up the database&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;bin/rails db:prepare
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For Linux (Debian / Ubuntu) you might need the following:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;apt install libxslt-dev libxml2-dev&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Start the application&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;bin/dev
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This starts the Rails server, the JavaScript build system, and a Sidekiq worker.&lt;/p&gt; 
&lt;p&gt;You can now access the application at &lt;code&gt;http://localhost:3000&lt;/code&gt;. Seller subdomains and the asset/api hosts use &lt;code&gt;*.localhost&lt;/code&gt; (e.g. &lt;code&gt;http://seller.localhost:3000&lt;/code&gt;, &lt;code&gt;http://api.localhost:3000&lt;/code&gt;) — modern browsers auto-resolve these to 127.0.0.1, so no &lt;code&gt;/etc/hosts&lt;/code&gt; edits are needed.&lt;/p&gt; 
&lt;h5&gt;Local dev limitations&lt;/h5&gt; 
&lt;p&gt;&lt;code&gt;*.localhost&lt;/code&gt; over HTTP is treated as a secure context by browsers (so Stripe.js, Stripe Elements, and other secure-context APIs work), but a couple of features that need either HTTPS or a registrable cookie domain don&#39;t work in this setup:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Apple Pay&lt;/strong&gt; — Stripe requires HTTPS for Apple Pay domain registration. Workaround: expose the app over HTTPS with &lt;a href=&quot;https://ngrok.com/&quot;&gt;ngrok&lt;/a&gt; (&lt;code&gt;ngrok http 3000&lt;/code&gt;) and register the resulting hostname in the &lt;a href=&quot;https://dashboard.stripe.com/settings/payments/apple_pay&quot;&gt;Stripe Apple Pay dashboard&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Cross-subdomain cookies&lt;/strong&gt; (affiliate attribution, &lt;code&gt;_gumroad_guid&lt;/code&gt;, multi-account &quot;switch seller&quot;, session) — browsers reject &lt;code&gt;Domain=localhost&lt;/code&gt;, so cookies set on &lt;code&gt;localhost:3000&lt;/code&gt; aren&#39;t sent to &lt;code&gt;seller.localhost:3000&lt;/code&gt;. Test these flows on a single host, or front the app with a local HTTPS reverse proxy on a registrable hostname (e.g. &lt;code&gt;gumroad.test&lt;/code&gt; via mkcert) where &lt;code&gt;Domain=.gumroad.test&lt;/code&gt; works.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Testing&lt;/h2&gt; 
&lt;p&gt;Run the full test suite:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;bin/rspec
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Run a single file or specific test:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;bin/rspec spec/requests/dashboard_spec.rb
bin/rspec spec/requests/dashboard_spec.rb:75
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Dependencies&lt;/h3&gt; 
&lt;p&gt;Before running tests:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;make local                          # start Docker services (db, Redis, etc.)
RAILS_ENV=test bin/rails db:setup   # set up the test database
RAILS_ENV=test bin/rails js:export  # generate JS constants for the test environment
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Integration tests&lt;/h3&gt; 
&lt;p&gt;Integration specs use Capybara with Selenium driving Chrome. Install Chrome from &lt;a href=&quot;https://www.google.com/chrome/&quot;&gt;google.com/chrome&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/docs/testing.md&quot;&gt;docs/testing.md&lt;/a&gt; for details on preventing flaky specs, VCR cassettes, debugging widgets, and purchase testing with Stripe/PayPal.&lt;/p&gt; 
&lt;h2&gt;Development&lt;/h2&gt; 
&lt;h3&gt;Logging in&lt;/h3&gt; 
&lt;p&gt;You can log in with the username &lt;code&gt;seller@gumroad.com&lt;/code&gt; and the password &lt;code&gt;password&lt;/code&gt;. The two-factor authentication code is &lt;code&gt;000000&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;Read more about logging in as a user with a different team role at &lt;a href=&quot;https://raw.githubusercontent.com/antiwork/gumroad/main/docs/users.md&quot;&gt;Users &amp;amp; authentication&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Resetting Elasticsearch indices&lt;/h3&gt; 
&lt;p&gt;You will need to explicitly reindex Elasticsearch to populate the indices after setup, otherwise you will see &lt;code&gt;index_not_found_exception&lt;/code&gt; errors when you visit the dev application. You can reset them using:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-ruby&quot;&gt;# Run this in a rails console:
DevTools.delete_all_indices_and_reindex_all
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Push Notifications&lt;/h3&gt; 
&lt;p&gt;To send push notifications:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;INITIALIZE_RPUSH_APPS=true bundle exec rpush start -e development -f
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Common Development Tasks&lt;/h3&gt; 
&lt;h4&gt;Rails console:&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;bin/rails c
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Rake tasks:&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;bin/rake task_name
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Linting&lt;/h3&gt; 
&lt;p&gt;We use ESLint for JS, and Rubocop for Ruby. Your editor should support displaying and fixing issues reported by these inline, and CI checks these on every push.&lt;/p&gt; 
&lt;p&gt;If you&#39;d like, you can run &lt;code&gt;git config --local core.hooksPath .githooks&lt;/code&gt; to check for these locally when committing.&lt;/p&gt; 
&lt;h2&gt;Common Issues&lt;/h2&gt; 
&lt;h3&gt;macOS Error When Running Tests (Related to &lt;code&gt;fork()&lt;/code&gt;)&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;objc[11912]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called.
objc[11912]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This issue occurs on macOS due to how the &lt;code&gt;fork()&lt;/code&gt; system call interacts with multithreaded Objective-C applications—commonly triggered when Spring is enabled during testing.&lt;/p&gt; 
&lt;h4&gt;How to Fix:&lt;/h4&gt; 
&lt;p&gt;Temporarily disable Spring before running your tests to avoid this error.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export DISABLE_SPRING=1
bin/rspec spec/requests/balance_pages_spec.rb
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This will disable Spring for the current session, allowing the tests to run without triggering the &lt;code&gt;fork()&lt;/code&gt;-related crash.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>chatwoot/chatwoot</title>
      <link>https://github.com/chatwoot/chatwoot</link>
      <description>&lt;p&gt;Open-source live-chat, email support, omni-channel desk. An alternative to Intercom, Zendesk, Salesforce Service Cloud etc. 🔥💬&lt;/p&gt;&lt;hr&gt;&lt;img src=&quot;https://raw.githubusercontent.com/chatwoot/chatwoot/develop/.github/screenshots/header.png#gh-light-mode-only&quot; width=&quot;100%&quot; alt=&quot;Header light mode&quot; /&gt; 
&lt;img src=&quot;https://raw.githubusercontent.com/chatwoot/chatwoot/develop/.github/screenshots/header-dark.png#gh-dark-mode-only&quot; width=&quot;100%&quot; alt=&quot;Header dark mode&quot; /&gt; 
&lt;hr /&gt; 
&lt;h1&gt;Chatwoot&lt;/h1&gt; 
&lt;p&gt;The modern customer support platform, an open-source alternative to Intercom, Zendesk, Salesforce Service Cloud etc.&lt;/p&gt; 
&lt;p&gt; &lt;img src=&quot;https://img.shields.io/circleci/build/github/chatwoot/chatwoot&quot; alt=&quot;CircleCI Badge&quot; /&gt; &lt;a href=&quot;https://hub.docker.com/r/chatwoot/chatwoot/&quot;&gt;&lt;img src=&quot;https://img.shields.io/docker/pulls/chatwoot/chatwoot&quot; alt=&quot;Docker Pull Badge&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://hub.docker.com/r/chatwoot/chatwoot/&quot;&gt;&lt;img src=&quot;https://img.shields.io/docker/cloud/build/chatwoot/chatwoot&quot; alt=&quot;Docker Build Badge&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/github/commit-activity/m/chatwoot/chatwoot&quot; alt=&quot;Commits-per-month&quot; /&gt; &lt;a title=&quot;Crowdin&quot; target=&quot;_self&quot; href=&quot;https://chatwoot.crowdin.com/chatwoot&quot;&gt;&lt;img src=&quot;https://badges.crowdin.net/e/37ced7eba411064bd792feb3b7a28b16/localized.svg?sanitize=true&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://discord.gg/cJXdrwS&quot;&gt;&lt;img src=&quot;https://img.shields.io/discord/647412545203994635&quot; alt=&quot;Discord&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://status.chatwoot.com&quot;&gt;&lt;img src=&quot;https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fchatwoot%2Fstatus%2Fmaster%2Fapi%2Fchatwoot%2Fuptime.json&quot; alt=&quot;uptime&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://status.chatwoot.com&quot;&gt;&lt;img src=&quot;https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fchatwoot%2Fstatus%2Fmaster%2Fapi%2Fchatwoot%2Fresponse-time.json&quot; alt=&quot;response time&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://artifacthub.io/packages/helm/chatwoot/chatwoot&quot;&gt;&lt;img src=&quot;https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/artifact-hub&quot; alt=&quot;Artifact HUB&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p&gt; &lt;a href=&quot;https://heroku.com/deploy?template=https://github.com/chatwoot/chatwoot/tree/master&quot; alt=&quot;Deploy to Heroku&quot;&gt; &lt;img width=&quot;150&quot; alt=&quot;Deploy&quot; src=&quot;https://www.herokucdn.com/deploy/button.svg?sanitize=true&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://marketplace.digitalocean.com/apps/chatwoot?refcode=f2238426a2a8&quot; alt=&quot;Deploy to DigitalOcean&quot;&gt; &lt;img width=&quot;200&quot; alt=&quot;Deploy to DO&quot; src=&quot;https://www.deploytodo.com/do-btn-blue.svg?sanitize=true&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;img src=&quot;https://raw.githubusercontent.com/chatwoot/chatwoot/develop/.github/screenshots/dashboard.png#gh-light-mode-only&quot; width=&quot;100%&quot; alt=&quot;Chat dashboard dark mode&quot; /&gt; 
&lt;img src=&quot;https://raw.githubusercontent.com/chatwoot/chatwoot/develop/.github/screenshots/dashboard-dark.png#gh-dark-mode-only&quot; width=&quot;100%&quot; alt=&quot;Chat dashboard&quot; /&gt; 
&lt;hr /&gt; 
&lt;p&gt;Chatwoot is the modern, open-source, and self-hosted customer support platform designed to help businesses deliver exceptional customer support experience. Built for scale and flexibility, Chatwoot gives you full control over your customer data while providing powerful tools to manage conversations across channels.&lt;/p&gt; 
&lt;h3&gt;✨ Captain – AI Agent for Support&lt;/h3&gt; 
&lt;p&gt;Supercharge your support with Captain, Chatwoot’s AI agent. Captain helps automate responses, handle common queries, and reduce agent workload—ensuring customers get instant, accurate answers. With Captain, your team can focus on complex conversations while routine questions are resolved automatically. Read more about Captain &lt;a href=&quot;https://chwt.app/captain-docs&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;💬 Omnichannel Support Desk&lt;/h3&gt; 
&lt;p&gt;Chatwoot centralizes all customer conversations into one powerful inbox, no matter where your customers reach out from. It supports live chat on your website, email, Facebook, Instagram, Twitter, WhatsApp, Telegram, Line, SMS etc.&lt;/p&gt; 
&lt;h3&gt;📚 Help center portal&lt;/h3&gt; 
&lt;p&gt;Publish help articles, FAQs, and guides through the built-in Help Center Portal. Enable customers to find answers on their own, reduce repetitive queries, and keep your support team focused on more complex issues.&lt;/p&gt; 
&lt;h3&gt;🗂️ Other features&lt;/h3&gt; 
&lt;h4&gt;Collaboration &amp;amp; Productivity&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;Private Notes and @mentions for internal team discussions.&lt;/li&gt; 
 &lt;li&gt;Labels to organize and categorize conversations.&lt;/li&gt; 
 &lt;li&gt;Keyboard Shortcuts and a Command Bar for quick navigation.&lt;/li&gt; 
 &lt;li&gt;Canned Responses to reply faster to frequently asked questions.&lt;/li&gt; 
 &lt;li&gt;Auto-Assignment to route conversations based on agent availability.&lt;/li&gt; 
 &lt;li&gt;Multi-lingual Support to serve customers in multiple languages.&lt;/li&gt; 
 &lt;li&gt;Custom Views and Filters for better inbox organization.&lt;/li&gt; 
 &lt;li&gt;Business Hours and Auto-Responders to manage response expectations.&lt;/li&gt; 
 &lt;li&gt;Teams and Automation tools for scaling support workflows.&lt;/li&gt; 
 &lt;li&gt;Agent Capacity Management to balance workload across the team.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Customer Data &amp;amp; Segmentation&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;Contact Management with profiles and interaction history.&lt;/li&gt; 
 &lt;li&gt;Contact Segments and Notes for targeted communication.&lt;/li&gt; 
 &lt;li&gt;Campaigns to proactively engage customers.&lt;/li&gt; 
 &lt;li&gt;Custom Attributes for storing additional customer data.&lt;/li&gt; 
 &lt;li&gt;Pre-Chat Forms to collect user information before starting conversations.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Integrations&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;Slack Integration to manage conversations directly from Slack.&lt;/li&gt; 
 &lt;li&gt;Dialogflow Integration for chatbot automation.&lt;/li&gt; 
 &lt;li&gt;Dashboard Apps to embed internal tools within Chatwoot.&lt;/li&gt; 
 &lt;li&gt;Shopify Integration to view and manage customer orders right within Chatwoot.&lt;/li&gt; 
 &lt;li&gt;Use Google Translate to translate messages from your customers in realtime.&lt;/li&gt; 
 &lt;li&gt;Create and manage Linear tickets within Chatwoot.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Reports &amp;amp; Insights&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;Live View of ongoing conversations for real-time monitoring.&lt;/li&gt; 
 &lt;li&gt;Conversation, Agent, Inbox, Label, and Team Reports for operational visibility.&lt;/li&gt; 
 &lt;li&gt;CSAT Reports to measure customer satisfaction.&lt;/li&gt; 
 &lt;li&gt;Downloadable Reports for offline analysis and reporting.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;p&gt;Detailed documentation is available at &lt;a href=&quot;https://www.chatwoot.com/help-center&quot;&gt;chatwoot.com/help-center&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Translation process&lt;/h2&gt; 
&lt;p&gt;The translation process for Chatwoot web and mobile app is managed at &lt;a href=&quot;https://translate.chatwoot.com&quot;&gt;https://translate.chatwoot.com&lt;/a&gt; using Crowdin. Please read the &lt;a href=&quot;https://www.chatwoot.com/docs/contributing/translating-chatwoot-to-your-language&quot;&gt;translation guide&lt;/a&gt; for contributing to Chatwoot.&lt;/p&gt; 
&lt;h2&gt;Branching model&lt;/h2&gt; 
&lt;p&gt;We use the &lt;a href=&quot;https://nvie.com/posts/a-successful-git-branching-model/&quot;&gt;git-flow&lt;/a&gt; branching model. The base branch is &lt;code&gt;develop&lt;/code&gt;. If you are looking for a stable version, please use the &lt;code&gt;master&lt;/code&gt; or tags labelled as &lt;code&gt;v1.x.x&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;Deployment&lt;/h2&gt; 
&lt;h3&gt;Heroku one-click deploy&lt;/h3&gt; 
&lt;p&gt;Deploying Chatwoot to Heroku is a breeze. It&#39;s as simple as clicking this button:&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://heroku.com/deploy?template=https://github.com/chatwoot/chatwoot/tree/master&quot;&gt;&lt;img src=&quot;https://www.herokucdn.com/deploy/button.svg?sanitize=true&quot; alt=&quot;Deploy&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Follow this &lt;a href=&quot;https://www.chatwoot.com/docs/environment-variables&quot;&gt;link&lt;/a&gt; to understand setting the correct environment variables for the app to work with all the features. There might be breakages if you do not set the relevant environment variables.&lt;/p&gt; 
&lt;h3&gt;DigitalOcean 1-Click Kubernetes deployment&lt;/h3&gt; 
&lt;p&gt;Chatwoot now supports 1-Click deployment to DigitalOcean as a kubernetes app.&lt;/p&gt; 
&lt;a href=&quot;https://marketplace.digitalocean.com/apps/chatwoot?refcode=f2238426a2a8&quot; alt=&quot;Deploy to DigitalOcean&quot;&gt; &lt;img width=&quot;200&quot; alt=&quot;Deploy to DO&quot; src=&quot;https://www.deploytodo.com/do-btn-blue.svg?sanitize=true&quot; /&gt; &lt;/a&gt; 
&lt;h3&gt;Other deployment options&lt;/h3&gt; 
&lt;p&gt;For other supported options, checkout our &lt;a href=&quot;https://chatwoot.com/deploy&quot;&gt;deployment page&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Security&lt;/h2&gt; 
&lt;p&gt;Looking to report a vulnerability? Please refer our &lt;a href=&quot;https://raw.githubusercontent.com/chatwoot/chatwoot/develop/SECURITY.md&quot;&gt;SECURITY.md&lt;/a&gt; file.&lt;/p&gt; 
&lt;h2&gt;Community&lt;/h2&gt; 
&lt;p&gt;If you need help or just want to hang out, come, say hi on our &lt;a href=&quot;https://discord.gg/cJXdrwS&quot;&gt;Discord&lt;/a&gt; server.&lt;/p&gt; 
&lt;h2&gt;Contributors&lt;/h2&gt; 
&lt;p&gt;Thanks goes to all these &lt;a href=&quot;https://www.chatwoot.com/docs/contributors&quot;&gt;wonderful people&lt;/a&gt;:&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/chatwoot/chatwoot/graphs/contributors&quot;&gt;&lt;img src=&quot;https://opencollective.com/chatwoot/contributors.svg?width=890&amp;amp;button=false&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;Chatwoot&lt;/em&gt; © 2017-2026, Chatwoot Inc - Released under the MIT License.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>jekyll/jekyll</title>
      <link>https://github.com/jekyll/jekyll</link>
      <description>&lt;p&gt;🌐 Jekyll is a blog-aware static site generator in Ruby&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;&lt;a href=&quot;https://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://rubygems.org/gems/jekyll&quot;&gt;&lt;img src=&quot;https://img.shields.io/gem/v/jekyll.svg?sanitize=true&quot; alt=&quot;Gem Version&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/jekyll/jekyll/actions?query=workflow%3A%22Continuous+Integration%22+branch%3Amaster&quot;&gt;&lt;img src=&quot;https://github.com/jekyll/jekyll/workflows/Continuous%20Integration/badge.svg?sanitize=true&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/jekyll/jekyll/master/#backers&quot;&gt;&lt;img src=&quot;https://opencollective.com/jekyll/backers/badge.svg?sanitize=true&quot; alt=&quot;Backers on Open Collective&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/jekyll/jekyll/master/#sponsors&quot;&gt;&lt;img src=&quot;https://opencollective.com/jekyll/sponsors/badge.svg?sanitize=true&quot; alt=&quot;Sponsors on Open Collective&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Jekyll is a simple, blog-aware, static site generator perfect for personal, project, or organization sites. Think of it like a file-based CMS, without all the complexity. Jekyll takes your content, renders Markdown and Liquid templates, and spits out a complete, static website ready to be served by Apache, Nginx or another web server. Jekyll is the engine behind &lt;a href=&quot;https://pages.github.com&quot;&gt;GitHub Pages&lt;/a&gt;, which you can use to host sites right from your GitHub repositories.&lt;/p&gt; 
&lt;h2&gt;Philosophy&lt;/h2&gt; 
&lt;p&gt;Jekyll does what you tell it to do&amp;nbsp;— no more, no less. It doesn&#39;t try to outsmart users by making bold assumptions, nor does it burden them with needless complexity and configuration. Put simply, Jekyll gets out of your way and allows you to concentrate on what truly matters: your content.&lt;/p&gt; 
&lt;p&gt;See: &lt;a href=&quot;https://jekyllrb.com/philosophy&quot;&gt;https://jekyllrb.com/philosophy&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://jekyllrb.com/docs/installation/&quot;&gt;Install&lt;/a&gt; the gem&lt;/li&gt; 
 &lt;li&gt;Read up about its &lt;a href=&quot;https://jekyllrb.com/docs/usage/&quot;&gt;Usage&lt;/a&gt; and &lt;a href=&quot;https://jekyllrb.com/docs/configuration/&quot;&gt;Configuration&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Take a gander at some existing &lt;a href=&quot;https://github.com/jekyll/jekyll/wiki/sites&quot;&gt;Sites&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jekyll/jekyll/fork&quot;&gt;Fork&lt;/a&gt; and &lt;a href=&quot;https://jekyllrb.com/docs/contributing/&quot;&gt;Contribute&lt;/a&gt; your own modifications&lt;/li&gt; 
 &lt;li&gt;Have questions? Check out our official forum community &lt;a href=&quot;https://talk.jekyllrb.com/&quot;&gt;Jekyll Talk&lt;/a&gt; and &lt;a href=&quot;https://libera.chat&quot;&gt;&lt;code&gt;#jekyll&lt;/code&gt; Channel on Libera IRC&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Diving In&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://import.jekyllrb.com/docs/home/&quot;&gt;Migrate&lt;/a&gt; from your previous system&lt;/li&gt; 
 &lt;li&gt;Learn how &lt;a href=&quot;https://jekyllrb.com/docs/front-matter/&quot;&gt;Front Matter&lt;/a&gt; works&lt;/li&gt; 
 &lt;li&gt;Put information on your site with &lt;a href=&quot;https://jekyllrb.com/docs/variables/&quot;&gt;Variables&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Customize the &lt;a href=&quot;https://jekyllrb.com/docs/permalinks/&quot;&gt;Permalinks&lt;/a&gt; your posts are generated with&lt;/li&gt; 
 &lt;li&gt;Use the built-in &lt;a href=&quot;https://jekyllrb.com/docs/templates/&quot;&gt;Liquid Extensions&lt;/a&gt; to make your life easier&lt;/li&gt; 
 &lt;li&gt;Use custom &lt;a href=&quot;https://jekyllrb.com/docs/plugins/&quot;&gt;Plugins&lt;/a&gt; to generate content specific to your site&lt;/li&gt; 
 &lt;li&gt;Watch &lt;a href=&quot;https://jekyllrb.com/tutorials/video-walkthroughs/&quot;&gt;video tutorials from Giraffe Academy&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Need help?&lt;/h2&gt; 
&lt;p&gt;If you don&#39;t find the answer to your problem in our &lt;a href=&quot;https://jekyllrb.com/docs/&quot;&gt;docs&lt;/a&gt;, or in the &lt;a href=&quot;https://jekyllrb.com/docs/troubleshooting/&quot;&gt;troubleshooting section&lt;/a&gt;, ask the &lt;a href=&quot;https://jekyllrb.com/docs/community/&quot;&gt;community&lt;/a&gt; for help.&lt;/p&gt; 
&lt;h2&gt;Code of Conduct&lt;/h2&gt; 
&lt;p&gt;In order to have a more open and welcoming community, Jekyll adheres to a &lt;a href=&quot;https://jekyllrb.com/docs/conduct/&quot;&gt;code of conduct&lt;/a&gt; adapted from the Ruby on Rails code of conduct.&lt;/p&gt; 
&lt;p&gt;Please adhere to this code of conduct in any interactions you have in the Jekyll community. It is strictly enforced on all official Jekyll repositories, websites, and resources. If you encounter someone violating these terms, please let one of our &lt;a href=&quot;https://jekyllrb.com/team/#core-team&quot;&gt;core team members&lt;/a&gt; know and we will address it as soon as possible.&lt;/p&gt; 
&lt;h2&gt;Credits&lt;/h2&gt; 
&lt;h3&gt;Sponsors&lt;/h3&gt; 
&lt;p&gt;Support this project by becoming a sponsor. Your logo will show up in this README with a link to your website. &lt;a href=&quot;https://opencollective.com/jekyll#sponsor&quot;&gt;Become a sponsor!&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/jekyll/sponsor/0/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/jekyll/sponsor/0/avatar.svg?sanitize=true&quot; alt=&quot;Jekyll Sponsor 0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/jekyll/sponsor/1/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/jekyll/sponsor/1/avatar.svg?sanitize=true&quot; alt=&quot;Jekyll Sponsor 1&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/jekyll/sponsor/2/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/jekyll/sponsor/2/avatar.svg?sanitize=true&quot; alt=&quot;Jekyll Sponsor 2&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/jekyll/sponsor/3/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/jekyll/sponsor/3/avatar.svg?sanitize=true&quot; alt=&quot;Jekyll Sponsor 3&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/jekyll/sponsor/4/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/jekyll/sponsor/4/avatar.svg?sanitize=true&quot; alt=&quot;Jekyll Sponsor 4&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/jekyll/sponsor/5/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/jekyll/sponsor/5/avatar.svg?sanitize=true&quot; alt=&quot;Jekyll Sponsor 5&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/jekyll/sponsor/6/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/jekyll/sponsor/6/avatar.svg?sanitize=true&quot; alt=&quot;Jekyll Sponsor 6&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/jekyll/sponsor/7/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/jekyll/sponsor/7/avatar.svg?sanitize=true&quot; alt=&quot;Jekyll Sponsor 7&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/jekyll/sponsor/8/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/jekyll/sponsor/8/avatar.svg?sanitize=true&quot; alt=&quot;Jekyll Sponsor 8&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opencollective.com/jekyll/sponsor/9/website&quot;&gt;&lt;img src=&quot;https://opencollective.com/jekyll/sponsor/9/avatar.svg?sanitize=true&quot; alt=&quot;Jekyll Sponsor 9&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Contributors&lt;/h3&gt; 
&lt;p&gt;This project exists thanks to all the people who contribute. &lt;a href=&quot;https://raw.githubusercontent.com/jekyll/graphs/contributors&quot;&gt;&lt;img src=&quot;https://opencollective.com/jekyll/contributors.svg?width=890&amp;amp;&amp;amp;avatarHeight=24&amp;amp;limit=100&amp;amp;button=false&quot; alt=&quot;Jekyll Contributors&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Backers&lt;/h3&gt; 
&lt;p&gt;Thank you to all our backers! 🙏 &lt;a href=&quot;https://opencollective.com/jekyll#backer&quot;&gt;Become a backer&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://opencollective.com/jekyll#backers&quot;&gt;&lt;img src=&quot;https://opencollective.com/jekyll/backers.svg?width=890&quot; alt=&quot;Jekyll Backers&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://github.com/jekyll/jekyll/raw/master/LICENSE&quot;&gt;LICENSE&lt;/a&gt; file.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>github-linguist/linguist</title>
      <link>https://github.com/github-linguist/linguist</link>
      <description>&lt;p&gt;Language Savant. If your repository&#39;s language is being reported incorrectly, send us a pull request!&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Linguist&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/github/linguist/actions&quot;&gt;&lt;img src=&quot;https://github.com/github/linguist/workflows/Run%20Tests/badge.svg?sanitize=true&quot; alt=&quot;Actions Status&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://codespaces.new/github-linguist/linguist&quot;&gt;&lt;img src=&quot;https://github.com/codespaces/badge.svg?sanitize=true&quot; alt=&quot;Open in GitHub Codespaces&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;This library is used on &lt;a href=&quot;http://GitHub.com&quot;&gt;GitHub.com&lt;/a&gt; to detect blob languages, ignore binary or vendored files, suppress generated files in diffs, and generate language breakdown graphs.&lt;/p&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github-linguist/linguist/main/docs/how-linguist-works.md&quot;&gt;How Linguist works&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github-linguist/linguist/main/docs/overrides.md&quot;&gt;Change Linguist&#39;s behaviour with overrides&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github-linguist/linguist/main/docs/troubleshooting.md&quot;&gt;Troubleshooting&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github-linguist/linguist/main/CONTRIBUTING.md&quot;&gt;Contributing guidelines&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;Install the gem:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;gem install github-linguist
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Dependencies&lt;/h3&gt; 
&lt;p&gt;Linguist is a Ruby library so you will need a recent version of Ruby installed. There are known problems with the macOS/Xcode supplied version of Ruby that causes problems installing some of the dependencies. Accordingly, we highly recommend you install a version of Ruby using Homebrew, &lt;code&gt;rbenv&lt;/code&gt;, &lt;code&gt;rvm&lt;/code&gt;, &lt;code&gt;ruby-build&lt;/code&gt;, &lt;code&gt;asdf&lt;/code&gt; or other packaging system, before attempting to install Linguist and the dependencies.&lt;/p&gt; 
&lt;p&gt;Linguist uses &lt;a href=&quot;https://github.com/brianmario/charlock_holmes&quot;&gt;&lt;code&gt;charlock_holmes&lt;/code&gt;&lt;/a&gt; for character encoding and &lt;a href=&quot;https://github.com/libgit2/rugged&quot;&gt;&lt;code&gt;rugged&lt;/code&gt;&lt;/a&gt; for libgit2 bindings for Ruby. These components have their own dependencies.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;charlock_holmes 
  &lt;ul&gt; 
   &lt;li&gt;cmake&lt;/li&gt; 
   &lt;li&gt;pkg-config&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;http://site.icu-project.org/&quot;&gt;ICU&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://zlib.net/&quot;&gt;zlib&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;rugged 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://curl.haxx.se/libcurl/&quot;&gt;libcurl&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://www.openssl.org&quot;&gt;OpenSSL&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;You may need to install missing dependencies before you can install Linguist. For example, on macOS with &lt;a href=&quot;http://brew.sh/&quot;&gt;Homebrew&lt;/a&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;brew install cmake pkg-config icu4c
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;On Ubuntu:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt-get install build-essential cmake pkg-config libicu-dev zlib1g-dev libcurl4-openssl-dev libssl-dev ruby-dev
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Usage&lt;/h2&gt; 
&lt;h3&gt;Application usage&lt;/h3&gt; 
&lt;p&gt;Linguist can be used in your application as follows:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-ruby&quot;&gt;require &#39;rugged&#39;
require &#39;linguist&#39;

repo = Rugged::Repository.new(&#39;.&#39;)
project = Linguist::Repository.new(repo, repo.head.target_id)
project.language       #=&amp;gt; &quot;Ruby&quot;
project.languages      #=&amp;gt; { &quot;Ruby&quot; =&amp;gt; 119387 }
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Command line usage&lt;/h3&gt; 
&lt;p&gt;The &lt;code&gt;github-linguist&lt;/code&gt; executable operates in two distinct modes:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github-linguist/linguist/main/#git-repository&quot;&gt;Git Repository mode&lt;/a&gt;&lt;/strong&gt; - Analyzes an entire Git repository (when given a directory path or no path)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github-linguist/linguist/main/#single-file&quot;&gt;Single file mode&lt;/a&gt;&lt;/strong&gt; - Analyzes a specific file (when given a file path)&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h4&gt;Git Repository&lt;/h4&gt; 
&lt;p&gt;A repository&#39;s languages stats can be assessed from the command line using the &lt;code&gt;github-linguist&lt;/code&gt; executable. Without any options, &lt;code&gt;github-linguist&lt;/code&gt; will output the language breakdown by percentage and file size.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd /path-to-repository
github-linguist
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can try running &lt;code&gt;github-linguist&lt;/code&gt; on the root directory in this repository itself:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ github-linguist
66.84%  264519     Ruby
24.68%  97685      C
6.57%   25999      Go
1.29%   5098       Lex
0.32%   1257       Shell
0.31%   1212       Dockerfile
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Additional options&lt;/h4&gt; 
&lt;h5&gt;&lt;code&gt;--rev REV&lt;/code&gt;&lt;/h5&gt; 
&lt;p&gt;The &lt;code&gt;--rev REV&lt;/code&gt; flag will change the git revision being analyzed to any &lt;a href=&quot;https://git-scm.com/docs/gitrevisions#_specifying_revisions&quot;&gt;gitrevisions(1)&lt;/a&gt; compatible revision you specify.&lt;/p&gt; 
&lt;p&gt;This is useful to analyze the makeup of a repo as of a certain tag, or in a certain branch.&lt;/p&gt; 
&lt;p&gt;For example, here is the popular &lt;a href=&quot;https://github.com/jekyll/jekyll&quot;&gt;Jekyll open source project&lt;/a&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ github-linguist jekyll

70.64%  709959     Ruby
23.04%  231555     Gherkin
3.80%   38178      JavaScript
1.19%   11943      HTML
0.79%   7900       Shell
0.23%   2279       Dockerfile
0.13%   1344       Earthly
0.10%   1019       CSS
0.06%   606        SCSS
0.02%   234        CoffeeScript
0.01%   90         Hack
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;And here is Jekyll&#39;s published website, from the gh-pages branch inside their repository.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ github-linguist jekyll --rev origin/gh-pages
100.00% 2568354    HTML
&lt;/code&gt;&lt;/pre&gt; 
&lt;h5&gt;&lt;code&gt;--breakdown&lt;/code&gt;&lt;/h5&gt; 
&lt;p&gt;The &lt;code&gt;--breakdown&lt;/code&gt; or &lt;code&gt;-b&lt;/code&gt; flag will additionally show the breakdown of files by language.&lt;/p&gt; 
&lt;p&gt;You can try running &lt;code&gt;github-linguist&lt;/code&gt; on the root directory in this repository itself:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ github-linguist --breakdown
66.84%  264519     Ruby
24.68%  97685      C
6.57%   25999      Go
1.29%   5098       Lex
0.32%   1257       Shell
0.31%   1212       Dockerfile

Ruby:
Gemfile
Rakefile
bin/git-linguist
bin/github-linguist
ext/linguist/extconf.rb
github-linguist.gemspec
lib/linguist.rb
…
&lt;/code&gt;&lt;/pre&gt; 
&lt;h5&gt;&lt;code&gt;--strategies&lt;/code&gt;&lt;/h5&gt; 
&lt;p&gt;The &lt;code&gt;--strategies&lt;/code&gt; or &lt;code&gt;-s&lt;/code&gt; flag will show the language detection strategy used for each file. This is useful for understanding how Linguist determined the language of specific files. Note that unless the &lt;code&gt;--json&lt;/code&gt; flag is specified, this flag will set the &lt;code&gt;--breakdown&lt;/code&gt; flag implicitly.&lt;/p&gt; 
&lt;p&gt;You can try running &lt;code&gt;github-linguist&lt;/code&gt; on the root directory in this repository itself with the strategies flag:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ github-linguist --breakdown --strategies
66.84%  264519     Ruby
24.68%  97685      C
6.57%   25999      Go
1.29%   5098       Lex
0.32%   1257       Shell
0.31%   1212       Dockerfile

Ruby:
  Gemfile [Filename]
  Rakefile [Filename]
  bin/git-linguist [Extension]
  bin/github-linguist [Extension]
  lib/linguist.rb [Extension]
  …
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If a file&#39;s language is affected by &lt;code&gt;.gitattributes&lt;/code&gt;, the strategy will show the original detection method along with a note indicating whether the gitattributes setting changed the result or confirmed it.&lt;/p&gt; 
&lt;p&gt;For instance, if you had the following .gitattributes overrides in your repo:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-gitattributes&quot;&gt;
*.ts linguist-language=JavaScript
*.js linguist-language=JavaScript

&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;the output of Linguist would be something like this:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;100.00% 217        JavaScript

JavaScript:
  demo.ts [Heuristics (overridden by .gitattributes)]
  demo.js [Extension (confirmed by .gitattributes)]
&lt;/code&gt;&lt;/pre&gt; 
&lt;h5&gt;&lt;code&gt;--json&lt;/code&gt;&lt;/h5&gt; 
&lt;p&gt;The &lt;code&gt;--json&lt;/code&gt; or &lt;code&gt;-j&lt;/code&gt; flag output the data into JSON format.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ github-linguist --json
{&quot;Dockerfile&quot;:{&quot;size&quot;:1212,&quot;percentage&quot;:&quot;0.31&quot;},&quot;Ruby&quot;:{&quot;size&quot;:264519,&quot;percentage&quot;:&quot;66.84&quot;},&quot;C&quot;:{&quot;size&quot;:97685,&quot;percentage&quot;:&quot;24.68&quot;},&quot;Lex&quot;:{&quot;size&quot;:5098,&quot;percentage&quot;:&quot;1.29&quot;},&quot;Shell&quot;:{&quot;size&quot;:1257,&quot;percentage&quot;:&quot;0.32&quot;},&quot;Go&quot;:{&quot;size&quot;:25999,&quot;percentage&quot;:&quot;6.57&quot;}}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This option can be used in conjunction with &lt;code&gt;--breakdown&lt;/code&gt; to get a full list of files along with the size and percentage data.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ github-linguist --breakdown --json
{&quot;Dockerfile&quot;:{&quot;size&quot;:1212,&quot;percentage&quot;:&quot;0.31&quot;,&quot;files&quot;:[&quot;Dockerfile&quot;,&quot;tools/grammars/Dockerfile&quot;]},&quot;Ruby&quot;:{&quot;size&quot;:264519,&quot;percentage&quot;:&quot;66.84&quot;,&quot;files&quot;:[&quot;Gemfile&quot;,&quot;Rakefile&quot;,&quot;bin/git-linguist&quot;,&quot;bin/github-linguist&quot;,&quot;ext/linguist/extconf.rb&quot;,&quot;github-linguist.gemspec&quot;,&quot;lib/linguist.rb&quot;,...]}}

&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;NB. The &lt;code&gt;--strategies&lt;/code&gt; flag has no effect, when the &lt;code&gt;--json&lt;/code&gt; flag is present.&lt;/p&gt; 
&lt;h4&gt;Single file&lt;/h4&gt; 
&lt;p&gt;Alternatively you can find stats for a single file using the &lt;code&gt;github-linguist&lt;/code&gt; executable.&lt;/p&gt; 
&lt;p&gt;You can try running &lt;code&gt;github-linguist&lt;/code&gt; on files in this repository itself:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ github-linguist grammars.yml
grammars.yml: 884 lines (884 sloc)
  type:      Text
  mime type: text/x-yaml
  language:  YAML
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Additional options&lt;/h4&gt; 
&lt;h5&gt;&lt;code&gt;--breakdown&lt;/code&gt;&lt;/h5&gt; 
&lt;p&gt;This flag has no effect in &lt;em&gt;Single file&lt;/em&gt; mode.&lt;/p&gt; 
&lt;h5&gt;&lt;code&gt;--strategies&lt;/code&gt;&lt;/h5&gt; 
&lt;p&gt;When using the &lt;code&gt;--strategies&lt;/code&gt; or &lt;code&gt;-s&lt;/code&gt; flag with a single file, you can see which detection method was used:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ github-linguist --strategies lib/linguist.rb 
lib/linguist.rb: 105 lines (96 sloc)
  type:      Text
  mime type: application/x-ruby
  language:  Ruby
  strategy:  Extension
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If a file&#39;s language is affected by &lt;code&gt;.gitattributes&lt;/code&gt;, the strategy will show whether the gitattributes setting changed the result or confirmed it:&lt;/p&gt; 
&lt;p&gt;In this fictitious example, it says &quot;confirmed by .gitattributes&quot; since the detection process (using the Filename strategy) would have given the same output as the override:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;.devcontainer/devcontainer.json: 27 lines (27 sloc)
  type:      Text
  mime type: application/json
  language:  JSON with Comments
  strategy:  Filename (confirmed by .gitattributes)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;In this other fictitious example, it says &quot;overridden by .gitattributes&quot; since the gitattributes setting changes the detected language to something different:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;test.rb: 13 lines (11 sloc)
  type:      Text
  mime type: application/x-ruby
  language:  Java
  strategy:  Extension (overridden by .gitattributes)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Here, the &lt;code&gt;.rb&lt;/code&gt; file would normally be detected as Ruby by the Extension strategy, but &lt;code&gt;.gitattributes&lt;/code&gt; overrides it to be detected as Java instead.&lt;/p&gt; 
&lt;h5&gt;&lt;code&gt;--json&lt;/code&gt;&lt;/h5&gt; 
&lt;p&gt;Using the &lt;code&gt;--json&lt;/code&gt; flag will give you the output for a single file in JSON format:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ github-linguist --strategies --json  lib/linguist.rb
{&quot;lib/linguist.rb&quot;:{&quot;lines&quot;:105,&quot;sloc&quot;:96,&quot;type&quot;:&quot;Text&quot;,&quot;mime_type&quot;:&quot;application/x-ruby&quot;,&quot;language&quot;:&quot;Ruby&quot;,&quot;large&quot;:false,&quot;generated&quot;:false,&quot;vendored&quot;:false}}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;NB. The &lt;code&gt;--strategies&lt;/code&gt; has no effect, when the &lt;code&gt;--json&lt;/code&gt; flag is present.&lt;/p&gt; 
&lt;h4&gt;Docker&lt;/h4&gt; 
&lt;p&gt;If you have Docker installed you can either build or use our pre-built images and run Linguist within a container:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ docker run --rm -v $(pwd):$(pwd):Z -w $(pwd) -t ghcr.io/github-linguist/linguist:latest
66.84%  264519     Ruby
24.68%  97685      C
6.57%   25999      Go
1.29%   5098       Lex
0.32%   1257       Shell
0.31%   1212       Dockerfile
&lt;/code&gt;&lt;/pre&gt; 
&lt;h5&gt;Building the image&lt;/h5&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ docker build -t linguist .
$ docker run --rm -v $(pwd):$(pwd):Z -w $(pwd) -t linguist
66.84%  264519     Ruby
24.68%  97685      C
6.57%   25999      Go
1.29%   5098       Lex
0.32%   1257       Shell
0.31%   1212       Dockerfile
$ docker run --rm -v $(pwd):$(pwd) -w $(pwd) -t linguist github-linguist --breakdown
66.84%  264519     Ruby
24.68%  97685      C
6.57%   25999      Go
1.29%   5098       Lex
0.32%   1257       Shell
0.31%   1212       Dockerfile

Ruby:
Gemfile
Rakefile
bin/git-linguist
bin/github-linguist
ext/linguist/extconf.rb
github-linguist.gemspec
lib/linguist.rb
…
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Please check out our &lt;a href=&quot;https://raw.githubusercontent.com/github-linguist/linguist/main/CONTRIBUTING.md&quot;&gt;contributing guidelines&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;The language grammars included in this gem are covered by their repositories&#39; respective licenses. &lt;a href=&quot;https://raw.githubusercontent.com/github-linguist/linguist/main/vendor/README.md&quot;&gt;&lt;code&gt;vendor/README.md&lt;/code&gt;&lt;/a&gt; lists the repository for each grammar.&lt;/p&gt; 
&lt;p&gt;All other files are covered by the MIT license, see &lt;a href=&quot;https://raw.githubusercontent.com/github-linguist/linguist/main/LICENSE&quot;&gt;&lt;code&gt;LICENSE&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>freeCodeCamp/devdocs</title>
      <link>https://github.com/freeCodeCamp/devdocs</link>
      <description>&lt;p&gt;API Documentation Browser&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;&lt;a href=&quot;https://devdocs.io&quot;&gt;DevDocs&lt;/a&gt; — API Documentation Browser&lt;/h1&gt; 
&lt;p&gt;DevDocs combines multiple developer documentations in a clean and organized web UI with instant search, offline support, mobile version, dark theme, keyboard shortcuts, and more.&lt;/p&gt; 
&lt;p&gt;DevDocs was created by &lt;a href=&quot;https://thibaut.me&quot;&gt;Thibaut Courouble&lt;/a&gt; and is operated by &lt;a href=&quot;https://www.freecodecamp.org&quot;&gt;freeCodeCamp&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;We are currently searching for maintainers&lt;/h2&gt; 
&lt;p&gt;Please reach out to the community on &lt;a href=&quot;https://discord.gg/PRyKn3Vbay&quot;&gt;Discord&lt;/a&gt; if you would like to join the team!&lt;/p&gt; 
&lt;p&gt;Keep track of development news:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Join the &lt;code&gt;#contributors&lt;/code&gt; chat room on &lt;a href=&quot;https://discord.gg/PRyKn3Vbay&quot;&gt;Discord&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Watch the repository on &lt;a href=&quot;https://github.com/freeCodeCamp/devdocs/subscription&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Table of Contents:&lt;/strong&gt; &lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/#quick-start&quot;&gt;Quick Start&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/#vision&quot;&gt;Vision&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/#app&quot;&gt;App&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/#scraper&quot;&gt;Scraper&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/#available-commands&quot;&gt;Commands&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/#contributing&quot;&gt;Contributing&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/#documentation&quot;&gt;Documentation&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/#related-projects&quot;&gt;Related Projects&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/#copyright--license&quot;&gt;License&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/#questions&quot;&gt;Questions?&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Quick Start&lt;/h2&gt; 
&lt;p&gt;Unless you wish to contribute to the project, we recommend using the hosted version at &lt;a href=&quot;https://devdocs.io&quot;&gt;devdocs.io&lt;/a&gt;. It&#39;s up-to-date and works offline out-of-the-box.&lt;/p&gt; 
&lt;h3&gt;Using Docker (Recommended)&lt;/h3&gt; 
&lt;p&gt;The easiest way to run DevDocs locally is using Docker:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;docker run --name devdocs -d -p 9292:9292 ghcr.io/freecodecamp/devdocs:latest
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This will start DevDocs at &lt;a href=&quot;http://localhost:9292&quot;&gt;localhost:9292&lt;/a&gt;. We provide both regular and Alpine-based images:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;ghcr.io/freecodecamp/devdocs:latest&lt;/code&gt; - Standard image&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;ghcr.io/freecodecamp/devdocs:latest-alpine&lt;/code&gt; - Alpine-based (smaller size)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Images are automatically built and updated monthly with the latest documentation.&lt;/p&gt; 
&lt;p&gt;Alternatively, you can build the image yourself:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git clone https://github.com/freeCodeCamp/devdocs.git &amp;amp;&amp;amp; cd devdocs
docker build -t devdocs .
docker run --name devdocs -d -p 9292:9292 devdocs
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Manual Installation&lt;/h3&gt; 
&lt;p&gt;DevDocs is made of two pieces: a Ruby scraper that generates the documentation and metadata, and a JavaScript app powered by a small Sinatra app.&lt;/p&gt; 
&lt;p&gt;DevDocs requires Ruby 4.0.5 (defined in &lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/Gemfile&quot;&gt;&lt;code&gt;Gemfile&lt;/code&gt;&lt;/a&gt;), libcurl, and a JavaScript runtime supported by &lt;a href=&quot;https://github.com/rails/execjs#readme&quot;&gt;ExecJS&lt;/a&gt; (included in OS X and Windows; &lt;a href=&quot;https://nodejs.org/en/&quot;&gt;Node.js&lt;/a&gt; on Linux). On Arch Linux run &lt;code&gt;pacman -S ruby ruby-bundler ruby-erb ruby-irb&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;Once you have these installed, run the following commands:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git clone https://github.com/freeCodeCamp/devdocs.git &amp;amp;&amp;amp; cd devdocs
gem install bundler
bundle install
bundle exec thor docs:download --default
bundle exec rackup
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Finally, point your browser at &lt;a href=&quot;http://localhost:9292&quot;&gt;localhost:9292&lt;/a&gt; (the first request will take a few seconds to compile the assets). You&#39;re all set.&lt;/p&gt; 
&lt;p&gt;The &lt;code&gt;thor docs:download&lt;/code&gt; command is used to download pre-generated documentations from DevDocs&#39;s servers (e.g. &lt;code&gt;thor docs:download html css&lt;/code&gt;). You can see the list of available documentations and versions by running &lt;code&gt;thor docs:list&lt;/code&gt;. To update all downloaded documentations, run &lt;code&gt;thor docs:download --installed&lt;/code&gt;. To download and install all documentation this project has available, run &lt;code&gt;thor docs:download --all&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; there is currently no update mechanism other than &lt;code&gt;git pull origin main&lt;/code&gt; to update the code and &lt;code&gt;thor docs:download --installed&lt;/code&gt; to download the latest version of the docs. To stay informed about new releases, be sure to &lt;a href=&quot;https://github.com/freeCodeCamp/devdocs/subscription&quot;&gt;watch&lt;/a&gt; this repository.&lt;/p&gt; 
&lt;h2&gt;Vision&lt;/h2&gt; 
&lt;p&gt;DevDocs aims to make reading and searching reference documentation fast, easy and enjoyable.&lt;/p&gt; 
&lt;p&gt;The app&#39;s main goals are to:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Keep load times as short as possible&lt;/li&gt; 
 &lt;li&gt;Improve the quality, speed, and order of search results&lt;/li&gt; 
 &lt;li&gt;Maximize the use of caching and other performance optimizations&lt;/li&gt; 
 &lt;li&gt;Maintain a clean and readable user interface&lt;/li&gt; 
 &lt;li&gt;Be fully functional offline&lt;/li&gt; 
 &lt;li&gt;Support full keyboard navigation&lt;/li&gt; 
 &lt;li&gt;Reduce “context switch” by using a consistent typography and design across all documentations&lt;/li&gt; 
 &lt;li&gt;Reduce clutter by focusing on a specific category of content (API/reference) and indexing only the minimum useful to most developers.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; DevDocs is neither a programming guide nor a search engine. All our content is pulled from third-party sources and the project doesn&#39;t intend to compete with full-text search engines. Its backbone is metadata; each piece of content is identified by a unique, &quot;obvious&quot; and short string. Tutorials, guides and other content that don&#39;t meet this requirement are outside the scope of the project.&lt;/p&gt; 
&lt;h2&gt;App&lt;/h2&gt; 
&lt;p&gt;The web app is all client-side JavaScript, powered by a small &lt;a href=&quot;http://www.sinatrarb.com&quot;&gt;Sinatra&lt;/a&gt;/&lt;a href=&quot;https://github.com/rails/sprockets&quot;&gt;Sprockets&lt;/a&gt; application. It relies on files generated by the &lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/#scraper&quot;&gt;scraper&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Many of the code&#39;s design decisions were driven by the fact that the app uses XHR to load content directly into the main frame. This includes stripping the original documents of most of their HTML markup (e.g. scripts and stylesheets) to avoid polluting the main frame, and prefixing all CSS class names with an underscore to prevent conflicts.&lt;/p&gt; 
&lt;p&gt;Another driving factor is performance and the fact that everything happens in the browser. A service worker (which comes with its own set of constraints) and &lt;code&gt;localStorage&lt;/code&gt; are used to speed up the boot time, while memory consumption is kept in check by allowing the user to pick his/her own set of documentations. The search algorithm is kept simple because it needs to be fast even searching through 100,000 strings.&lt;/p&gt; 
&lt;p&gt;DevDocs being a developer tool, the browser requirements are high:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Recent versions of Firefox, Chrome, or Opera&lt;/li&gt; 
 &lt;li&gt;Safari 11.1+&lt;/li&gt; 
 &lt;li&gt;Edge 17+&lt;/li&gt; 
 &lt;li&gt;iOS 11.3+&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This allows the code to take advantage of the latest DOM and HTML5 APIs and make developing DevDocs a lot more fun!&lt;/p&gt; 
&lt;h2&gt;Scraper&lt;/h2&gt; 
&lt;p&gt;The scraper is responsible for generating the documentation and index files (metadata) used by the &lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/#app&quot;&gt;app&lt;/a&gt;. It&#39;s written in Ruby under the &lt;code&gt;Docs&lt;/code&gt; module.&lt;/p&gt; 
&lt;p&gt;There are currently two kinds of scrapers: &lt;code&gt;UrlScraper&lt;/code&gt; which downloads files via HTTP and &lt;code&gt;FileScraper&lt;/code&gt; which reads them from the local filesystem. They both make copies of HTML documents, recursively following links that match a set of rules and applying all sorts of modifications along the way, in addition to building an index of the files and their metadata. Documents are parsed using &lt;a href=&quot;http://nokogiri.org&quot;&gt;Nokogiri&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Modifications made to each document include:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;removing content such as the document structure (&lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;, etc.), comments, empty nodes, etc.&lt;/li&gt; 
 &lt;li&gt;fixing links (e.g. to remove duplicates)&lt;/li&gt; 
 &lt;li&gt;replacing all external (not scraped) URLs with their fully qualified counterpart&lt;/li&gt; 
 &lt;li&gt;replacing all internal (scraped) URLs with their unqualified and relative counterpart&lt;/li&gt; 
 &lt;li&gt;adding content, such as a title and link to the original document&lt;/li&gt; 
 &lt;li&gt;ensuring correct syntax highlighting using &lt;a href=&quot;http://prismjs.com/&quot;&gt;Prism&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;These modifications are applied via a set of filters using the &lt;a href=&quot;https://github.com/jch/html-pipeline&quot;&gt;HTML::Pipeline&lt;/a&gt; library. Each scraper includes filters specific to itself, one of which is tasked with figuring out the pages&#39; metadata.&lt;/p&gt; 
&lt;p&gt;The end result is a set of normalized HTML partials and two JSON files (index + offline data). Because the index files are loaded separately by the &lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/#app&quot;&gt;app&lt;/a&gt; following the user&#39;s preferences, the scraper also creates a JSON manifest file containing information about the documentations currently available on the system (such as their name, version, update date, etc.).&lt;/p&gt; 
&lt;p&gt;More information about &lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/docs/scraper-reference.md&quot;&gt;scrapers&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/docs/filter-reference.md&quot;&gt;filters&lt;/a&gt; is available in the &lt;code&gt;docs&lt;/code&gt; folder.&lt;/p&gt; 
&lt;h2&gt;Available Commands&lt;/h2&gt; 
&lt;p&gt;The command-line interface uses &lt;a href=&quot;http://whatisthor.com&quot;&gt;Thor&lt;/a&gt;. To see all commands and options, run &lt;code&gt;thor list&lt;/code&gt; from the project&#39;s root.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;# Server
rackup              # Start the server (ctrl+c to stop)
rackup --help       # List server options

# Docs
thor docs:list      # List available documentations
thor docs:download  # Download one or more documentations
thor docs:manifest  # Create the manifest file used by the app
thor docs:generate  # Generate/scrape a documentation
thor docs:page      # Generate/scrape a documentation page
thor docs:package   # Package a documentation for use with docs:download
thor docs:clean     # Delete documentation packages

# Console
thor console        # Start a REPL
thor console:docs   # Start a REPL in the &quot;Docs&quot; module

# Tests can be run quickly from within the console using the &quot;test&quot; command.
# Run &quot;help test&quot; for usage instructions.
thor test:all       # Run all tests
thor test:docs      # Run &quot;Docs&quot; tests
thor test:app       # Run &quot;App&quot; tests
thor test:coverage  # Run coverage report on &quot;App&quot; tests

# Assets
thor assets:compile # Compile assets (not required in development mode)
thor assets:clean   # Clean old assets
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If multiple versions of Ruby are installed on your system, commands must be run through &lt;code&gt;bundle exec&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Contributions are welcome. Please read the &lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/.github/CONTRIBUTING.md&quot;&gt;contributing guidelines&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/docs/adding-docs.md&quot;&gt;Adding documentations to DevDocs&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/docs/scraper-reference.md&quot;&gt;Scraper Reference&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/docs/filter-reference.md&quot;&gt;Filter Reference&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/docs/maintainers.md&quot;&gt;Maintainers’ Guide&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;DevDocs Quick Usage Cheatsheet&lt;/h2&gt; 
&lt;p&gt;Below are some helpful shortcuts and usage tips that are not immediately obvious to new users:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Press &lt;kbd&gt;/&lt;/kbd&gt; or &lt;kbd&gt;Ctrl + K&lt;/kbd&gt; to instantly focus the search bar.&lt;/li&gt; 
 &lt;li&gt;Press &lt;kbd&gt;?&lt;/kbd&gt; to open DevDocs’ built-in help overlay.&lt;/li&gt; 
 &lt;li&gt;Press &lt;kbd&gt;↑&lt;/kbd&gt; or &lt;kbd&gt;↓&lt;/kbd&gt; to navigate search results without touching the mouse.&lt;/li&gt; 
 &lt;li&gt;Press &lt;kbd&gt;Enter&lt;/kbd&gt; to open the highlighted search result.&lt;/li&gt; 
 &lt;li&gt;Press &lt;kbd&gt;Backspace&lt;/kbd&gt; to go back to the previously viewed page.&lt;/li&gt; 
 &lt;li&gt;Press &lt;kbd&gt;Shift + S&lt;/kbd&gt; to toggle the sidebar visibility.&lt;/li&gt; 
 &lt;li&gt;Press &lt;kbd&gt;A&lt;/kbd&gt; to open the list of all installed documentation sets.&lt;/li&gt; 
 &lt;li&gt;Press &lt;kbd&gt;Esc&lt;/kbd&gt; to close popups, overlays, and search.&lt;/li&gt; 
 &lt;li&gt;Use the &lt;strong&gt;⚡ Offline Mode toggle&lt;/strong&gt; to download docs for offline use.&lt;/li&gt; 
 &lt;li&gt;You can pin specific documentation sets to the sidebar for quicker access.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;These shortcuts make DevDocs faster to navigate and more efficient for daily use.&lt;/p&gt; 
&lt;h2&gt;Related Projects&lt;/h2&gt; 
&lt;p&gt;Made something cool? Feel free to open a PR to add a new row to this table! You might want to discover new projects via &lt;a href=&quot;https://github.com/topics/devdocs&quot;&gt;https://github.com/topics/devdocs&lt;/a&gt;.&lt;/p&gt; 
&lt;!-- table is sorted by description --&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Project&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th&gt;Last commit&lt;/th&gt; 
   &lt;th&gt;Stars&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/yannickglt/alfred-devdocs&quot;&gt;yannickglt/alfred-devdocs&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Alfred workflow&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/yannickglt/alfred-devdocs?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/yannickglt/alfred-devdocs?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/Merith-TK/devdocs_webapp_kotlin&quot;&gt;Merith-TK/devdocs_webapp_kotlin&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Android application&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/Merith-TK/devdocs_webapp_kotlin?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/Merith-TK/devdocs_webapp_kotlin?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/gruehle/dev-docs-viewer&quot;&gt;gruehle/dev-docs-viewer&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Brackets extension&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/gruehle/dev-docs-viewer?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/gruehle/dev-docs-viewer?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/egoist/devdocs-desktop&quot;&gt;egoist/devdocs-desktop&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Electron application&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/egoist/devdocs-desktop?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/egoist/devdocs-desktop?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/skeeto/devdocs-lookup&quot;&gt;skeeto/devdocs-lookup&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Emacs function&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/skeeto/devdocs-lookup?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/skeeto/devdocs-lookup?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/astoff/devdocs.el&quot;&gt;astoff/devdocs.el&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Emacs viewer&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/astoff/devdocs.el?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/astoff/devdocs.el?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/naquad/devdocs-shell&quot;&gt;naquad/devdocs-shell&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;GTK shell with Vim integration&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/naquad/devdocs-shell?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/naquad/devdocs-shell?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/hardpixel/devdocs-desktop&quot;&gt;hardpixel/devdocs-desktop&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;GTK application&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/hardpixel/devdocs-desktop?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/hardpixel/devdocs-desktop?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/qwfy/doc-browser&quot;&gt;qwfy/doc-browser&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Linux application&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/qwfy/doc-browser?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/qwfy/doc-browser?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/dteoh/devdocs-macos&quot;&gt;dteoh/devdocs-macos&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;macOS application&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/dteoh/devdocs-macos?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/dteoh/devdocs-macos?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://sublime.wbond.net/packages/DevDocs&quot;&gt;Sublime Text plugin&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Sublime Text plugin&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/vitorbritto/sublime-devdocs?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/vitorbritto/sublime-devdocs?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/mohamed3nan/DevDocs-Tab&quot;&gt;mohamed3nan/DevDocs-Tab&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;VS Code extension (view as tab)&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/mohamed3nan/DevDocs-Tab?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/mohamed3nan/DevDocs-Tab?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=deibit.devdocs&quot;&gt;deibit/vscode-devdocs&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;VS Code extension (open the browser)&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/deibit/vscode-devdocs?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/deibit/vscode-devdocs?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/mdh34/quickDocs&quot;&gt;mdh34/quickDocs&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Vala/Python based viewer&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/mdh34/quickDocs?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/mdh34/quickDocs?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/girishji/devdocs.vim&quot;&gt;girishji/devdocs.vim&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Vim plugin &amp;amp; TUI (browse inside Vim)&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/girishji/devdocs.vim?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/girishji/devdocs.vim?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/romainl/vim-devdocs&quot;&gt;romainl/vim-devdocs&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Vim plugin&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/romainl/vim-devdocs?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/romainl/vim-devdocs?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/waiting-for-dev/vim-www&quot;&gt;waiting-for-dev/vim-www&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Vim plugin&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/waiting-for-dev/vim-www?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/waiting-for-dev/vim-www?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/emmanueltouzery/apidocs.nvim&quot;&gt;emmanueltouzery/apidocs.nvim&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Neovim plugin&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/emmanueltouzery/apidocs.nvim?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/emmanueltouzery/apidocs.nvim?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/toiletbril/dedoc&quot;&gt;toiletbril/dedoc&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Terminal based viewer&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/toiletbril/dedoc?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/toiletbril/dedoc?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.raycast.com/djpowers/devdocs&quot;&gt;Raycast Devdocs&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Raycast extension&lt;/td&gt; 
   &lt;td&gt;Unavailable&lt;/td&gt; 
   &lt;td&gt;Unavailable&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/chrisgrieser/alfred-docs-searches&quot;&gt;chrisgrieser/alfred-docs-searches&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Alfred workflow&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/chrisgrieser/alfred-docs-searches?logo=github&amp;amp;label&quot; alt=&quot;Latest GitHub commit&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://img.shields.io/github/stars/chrisgrieser/alfred-docs-searches?logo=github&amp;amp;label&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Copyright / License&lt;/h2&gt; 
&lt;p&gt;Copyright 2013–2026 Thibaut Courouble and &lt;a href=&quot;https://github.com/freeCodeCamp/devdocs/graphs/contributors&quot;&gt;other contributors&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;This software is licensed under the terms of the Mozilla Public License v2.0. See the &lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/COPYRIGHT&quot;&gt;COPYRIGHT&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/freeCodeCamp/devdocs/main/LICENSE&quot;&gt;LICENSE&lt;/a&gt; files.&lt;/p&gt; 
&lt;p&gt;Please do not use the name DevDocs to endorse or promote products derived from this software without the maintainers&#39; permission, except as may be necessary to comply with the notice/attribution requirements.&lt;/p&gt; 
&lt;p&gt;We also wish that any documentation file generated using this software be attributed to DevDocs. Let&#39;s be fair to all contributors by giving credit where credit&#39;s due. Thanks!&lt;/p&gt; 
&lt;h2&gt;Questions?&lt;/h2&gt; 
&lt;p&gt;If you have any questions, please feel free to ask them on the &lt;code&gt;#contributors&lt;/code&gt; chat room on &lt;a href=&quot;https://discord.gg/PRyKn3Vbay&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>we-promise/sure</title>
      <link>https://github.com/we-promise/sure</link>
      <description>&lt;p&gt;The personal finance app for everyone (by everyone)&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;a href=&quot;https://deepwiki.com/we-promise/sure&quot;&gt;&lt;img src=&quot;https://deepwiki.com/badge.svg?sanitize=true&quot; alt=&quot;Ask DeepWiki&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://oss.skylight.io/app/applications/s6PEZSKwcklL&quot;&gt;&lt;img src=&quot;https://badges.skylight.io/typical/s6PEZSKwcklL.svg?sanitize=true&quot; alt=&quot;View performance data on Skylight&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://app.dosu.dev/a72bdcfd-15f5-4edc-bd85-ea0daa6c3adc/ask&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/dosu-ai/assets/main/dosu-badge.svg?sanitize=true&quot; alt=&quot;Dosu&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/we-promise/sure/actions/workflows/pipelock.yml&quot;&gt;&lt;img src=&quot;https://github.com/we-promise/sure/actions/workflows/pipelock.yml/badge.svg?sanitize=true&quot; alt=&quot;Pipelock Security Scan&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;img width=&quot;1270&quot; height=&quot;1140&quot; alt=&quot;sure_shot&quot; src=&quot;https://github.com/user-attachments/assets/9c6e03cc-3490-40ab-9a68-52e042c51293&quot; /&gt; 
&lt;p align=&quot;center&quot;&gt; 
 &lt;!-- Keep these links. Translations will automatically update with the README. --&gt; &lt;a href=&quot;https://readme-i18n.com/de/we-promise/sure&quot;&gt;Deutsch&lt;/a&gt; | &lt;a href=&quot;https://readme-i18n.com/es/we-promise/sure&quot;&gt;Español&lt;/a&gt; | &lt;a href=&quot;https://readme-i18n.com/fr/we-promise/sure&quot;&gt;Français&lt;/a&gt; | &lt;a href=&quot;https://readme-i18n.com/ja/we-promise/sure&quot;&gt;日本語&lt;/a&gt; | &lt;a href=&quot;https://readme-i18n.com/ko/we-promise/sure&quot;&gt;한국어&lt;/a&gt; | &lt;a href=&quot;https://readme-i18n.com/pt/we-promise/sure&quot;&gt;Português&lt;/a&gt; | &lt;a href=&quot;https://readme-i18n.com/ru/we-promise/sure&quot;&gt;Русский&lt;/a&gt; | &lt;a href=&quot;https://readme-i18n.com/zh/we-promise/sure&quot;&gt;中文&lt;/a&gt; &lt;/p&gt; 
&lt;h1&gt;Sure: The personal finance app for everyone&lt;/h1&gt; 
&lt;p&gt;&lt;b&gt;Get involved: &lt;a href=&quot;https://discord.gg/36ZGBsxYEK&quot;&gt;Discord&lt;/a&gt; • &lt;a href=&quot;https://sure.am&quot;&gt;Website&lt;/a&gt; • &lt;a href=&quot;https://github.com/we-promise/sure/issues&quot;&gt;Issues&lt;/a&gt;&lt;/b&gt;&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;This repository is a community fork of the now-abandoned Maybe Finance project. &lt;br /&gt; Learn more in their &lt;a href=&quot;https://github.com/maybe-finance/maybe/releases/tag/v0.6.0&quot;&gt;final release&lt;/a&gt; doc.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Backstory&lt;/h2&gt; 
&lt;p&gt;The &lt;a href=&quot;https://github.com/maybe-finance/maybe&quot;&gt;Maybe Finance&lt;/a&gt; (archived/abandoned repo) team spent most of 2021–2022 building a full-featured personal finance and wealth management app. It even included an “Ask an Advisor” feature that connected users with a real CFP/CFA — all included with your subscription.&lt;/p&gt; 
&lt;p&gt;The business end of things didn&#39;t work out, and so they stopped developing the app in mid-2023.&lt;/p&gt; 
&lt;p&gt;After spending nearly $1 million on development (employees, contractors, data providers, infra, etc.), the team open-sourced the app. Their goal was to let users self-host it for free — and eventually launch a hosted version for a small fee.&lt;/p&gt; 
&lt;p&gt;They actually did launch that hosted version … briefly.&lt;/p&gt; 
&lt;p&gt;That also didn’t work out — at least not as a sustainable B2C business — so now here we are: hosting a community-maintained fork to keep the codebase alive and see where this can go next.&lt;/p&gt; 
&lt;p&gt;Join us!&lt;/p&gt; 
&lt;h2&gt;Hosting Sure&lt;/h2&gt; 
&lt;p&gt;Sure is a fully working personal finance app that can be &lt;a href=&quot;https://raw.githubusercontent.com/we-promise/sure/main/docs/hosting/docker.md&quot;&gt;self hosted with Docker&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Forking and Attribution&lt;/h2&gt; 
&lt;p&gt;This repo is a community fork of the archived Maybe Finance repo. You’re free to fork it under the AGPLv3 license — but we’d love it if you stuck around and contributed here instead.&lt;/p&gt; 
&lt;p&gt;To stay compliant and avoid trademark issues:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Be sure to include the original &lt;a href=&quot;https://github.com/maybe-finance/maybe/raw/main/LICENSE&quot;&gt;AGPLv3 license&lt;/a&gt; and clearly state in your README that your fork is based on Maybe Finance but is &lt;strong&gt;not affiliated with or endorsed by&lt;/strong&gt; Maybe Finance Inc.&lt;/li&gt; 
 &lt;li&gt;&quot;Maybe&quot; is a trademark of Maybe Finance Inc. and therefore, use of it is NOT allowed in forked repositories (or the logo)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Performance Issues&lt;/h2&gt; 
&lt;p&gt;With data-heavy apps, inevitably, there are performance issues. We&#39;ve set up a public dashboard showing the problematic requests seen on the demo site, along with the stacktraces to help debug them.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://oss.skylight.io/app/applications/s6PEZSKwcklL/recent/6h/endpoints&quot;&gt;https://www.skylight.io/app/applications/s6PEZSKwcklL/recent/6h/endpoints&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Any contributions that help improve performance are very much welcome.&lt;/p&gt; 
&lt;h2&gt;Local Development Setup&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;If you are trying to &lt;em&gt;self-host&lt;/em&gt; the app, &lt;a href=&quot;https://raw.githubusercontent.com/we-promise/sure/main/docs/hosting/docker.md&quot;&gt;read this guide to get started&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;The instructions below are for developers to get started with contributing to the app.&lt;/p&gt; 
&lt;h3&gt;Requirements&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;See &lt;code&gt;.ruby-version&lt;/code&gt; file for required Ruby version&lt;/li&gt; 
 &lt;li&gt;PostgreSQL &amp;gt;9.3 (latest stable version recommended)&lt;/li&gt; 
 &lt;li&gt;Redis &amp;gt; 5.4 (latest stable version recommended)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Getting Started&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;cd sure
cp .env.local.example .env.local
bin/setup
bin/dev

# Optionally, load demo data
rake demo_data:default
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Visit &lt;a href=&quot;http://localhost:3000&quot;&gt;http://localhost:3000&lt;/a&gt; to view the app.&lt;/p&gt; 
&lt;p&gt;If you loaded the optional demo data, log in with these credentials:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Email: &lt;code&gt;user@example.com&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Password: &lt;code&gt;Password1!&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For further instructions, see guides below.&lt;/p&gt; 
&lt;h3&gt;Setup Guides&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/we-promise/sure/wiki/Mac-Dev-Setup-Guide&quot;&gt;Mac dev setup&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/we-promise/sure/wiki/Linux-Dev-Setup-Guide&quot;&gt;Linux dev setup&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/we-promise/sure/wiki/Windows-Dev-Setup-Guide&quot;&gt;Windows dev setup&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Dev containers - visit &lt;a href=&quot;https://code.visualstudio.com/docs/devcontainers/containers&quot;&gt;this guide&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;One-click Install&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.pikapods.com/pods?run=sure&quot;&gt;&lt;img src=&quot;https://www.pikapods.com/static/run-button.svg?sanitize=true&quot; alt=&quot;Run on PikaPods&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://railway.com/deploy/sure?referralCode=CW_fPQ&quot;&gt;&lt;img src=&quot;https://railway.com/button.svg?sanitize=true&quot; alt=&quot;Deploy on Railway&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Managed OpenClaw for Sure Finances&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://kilocode.pxf.io/repo-readme&quot;&gt;&lt;img src=&quot;https://kilo.ai/kiloclaw/partner-resources/kiloclaw-logo-yellow-bg-typography.png&quot; alt=&quot;Managed OpenClaw for Sure Finances&quot; width=&quot;185&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;License and Trademarks&lt;/h2&gt; 
&lt;p&gt;Maybe and Sure are both distributed under an &lt;a href=&quot;https://github.com/we-promise/sure/raw/main/LICENSE&quot;&gt;AGPLv3 license&lt;/a&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&quot;Maybe&quot; is a trademark of Maybe Finance, Inc.&lt;/li&gt; 
 &lt;li&gt;&quot;Sure&quot; is not, and refers to this community fork.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;img src=&quot;https://repobeats.axiom.co/api/embed/3a9753cff07501fba8a6749d0ebd567ff63848c8.svg?sanitize=true&quot; alt=&quot;Alt&quot; title=&quot;Repobeats analytics image&quot; /&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>zammad/zammad</title>
      <link>https://github.com/zammad/zammad</link>
      <description>&lt;p&gt;Zammad is a web based open source helpdesk/customer support system.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Welcome to Zammad&lt;/h1&gt; 
&lt;p&gt;Are you juggling countless customer inquiries across multiple channels? Struggling to keep your support team on the same page? Or spending more time managing your helpdesk than delivering exceptional support to your customers?&lt;/p&gt; 
&lt;p&gt;Zammad is your Swiss Army knife - a web-based, open-source helpdesk and customer support platform packed with features to streamline customer communication across channels like email, chat, telephone and social media.&lt;/p&gt; 
&lt;h2&gt;The Software&lt;/h2&gt; 
&lt;p&gt;The Zammad software is and will stay open source. It is licensed under the GNU AGPLv3. The source code is &lt;a href=&quot;https://github.com/zammad/zammad&quot;&gt;available on GitHub&lt;/a&gt; and owned by the &lt;a href=&quot;https://zammad-foundation.org/&quot;&gt;Zammad Foundation&lt;/a&gt;, which is independent of commercial providers such as Zammad GmbH.&lt;/p&gt; 
&lt;h2&gt;The Company - Zammad GmbH&lt;/h2&gt; 
&lt;p&gt;The development of Zammad is carried out by the &lt;a href=&quot;https://zammad.com/en/company&quot;&gt;amazing team of people&lt;/a&gt; at &lt;a href=&quot;https://zammad.com/&quot;&gt;Zammad GmbH&lt;/a&gt; in collaboration with the community. We love to create open source software for you. If you want to ensure the Zammad software has a bright and sustainable future, consider becoming a Zammad customer!&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Are you tired of complex setup, configuration, backup and update tasks? Let us handle this stuff for you! 🚀&lt;/p&gt; 
 &lt;p&gt;The easiest and often most cost-effective way to operate Zammad is &lt;a href=&quot;https://zammad.com/en/pricing&quot;&gt;our cloud service&lt;/a&gt;. Give it a try with a &lt;a href=&quot;https://zammad.com/en/getting-started&quot;&gt;free trial instance&lt;/a&gt;!&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h2&gt;Status&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Toolchain: &lt;a href=&quot;https://github.com/zammad/zammad/actions/workflows/ci.yaml&quot;&gt;&lt;img src=&quot;https://github.com/zammad/zammad/workflows/CI/badge.svg?sanitize=true&quot; alt=&quot;CI&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/zammad/zammad/actions/workflows/docker-release.yaml&quot;&gt;&lt;img src=&quot;https://github.com/zammad/zammad/workflows/docker-release/badge.svg?sanitize=true&quot; alt=&quot;docker-release workflow&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://docs.zammad.org&quot;&gt;&lt;img src=&quot;https://readthedocs.org/projects/zammad/badge/&quot; alt=&quot;documentation status&quot; /&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Docker container images: &lt;a href=&quot;https://hub.docker.com/r/zammad/zammad-docker-compose&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/version-stable-blue.svg?sanitize=true&quot; alt=&quot;Docker images for Zammad&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://hub.docker.com/r/zammad/zammad-docker-compose/&quot;&gt;&lt;img src=&quot;https://badgen.net/docker/pulls/zammad/zammad-docker-compose?icon=docker&amp;amp;label=pulls&quot; alt=&quot;Dockerhub Pulls&quot; /&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Helm chart for Kubernetes: &lt;a href=&quot;https://artifacthub.io/packages/helm/zammad/zammad&quot;&gt;&lt;img src=&quot;https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/zammad&quot; alt=&quot;Artifact Hub&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/zammad/zammad-helm/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/downloads/zammad/zammad-helm/total.svg?sanitize=true&quot; alt=&quot;Release downloads&quot; /&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Download DEB/RPM: &lt;a href=&quot;https://packager.io/gh/zammad/zammad/refs/stable&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Branch-stable-blue.svg?sanitize=true&quot; alt=&quot;binary packages for Zammad stable&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://packager.io/gh/zammad/zammad/refs/develop&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Branch-develop-lightgrey.svg?sanitize=true&quot; alt=&quot;binary packages for Zammad develop&quot; /&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;License: &lt;a href=&quot;https://github.com/zammad/zammad/raw/develop/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-AGPL%203.0-brightgreen.svg?sanitize=true&quot; alt=&quot;AGPL license&quot; /&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Further Information&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.zammad.org&quot;&gt;Installing &amp;amp; Getting Started&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://zammad.org/screenshots&quot;&gt;Screenshots&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/zammad/zammad/develop/doc/developer_manual/index.md&quot;&gt;Developer Manual&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.zammad.org/en/latest/api/intro.html&quot;&gt;REST API&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;For reporting security vulnerabilities, please see &lt;a href=&quot;https://raw.githubusercontent.com/zammad/zammad/develop/SECURITY.md&quot;&gt;our security policy&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://zammad.org/participate&quot;&gt;Contributing&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Thanks! ❤️ ❤️ ❤️&lt;/p&gt; 
&lt;p&gt;Your Zammad Team&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>gitlabhq/gitlabhq</title>
      <link>https://github.com/gitlabhq/gitlabhq</link>
      <description>&lt;p&gt;GitLab CE Mirror | Please open new issues in our issue tracker on GitLab.com&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;GitLab&lt;/h1&gt; 
&lt;h2&gt;Canonical source&lt;/h2&gt; 
&lt;p&gt;The canonical source of GitLab where all development takes place is &lt;a href=&quot;https://gitlab.com/gitlab-org/gitlab&quot;&gt;hosted on GitLab.com&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;If you wish to clone a copy of GitLab without proprietary code, you can use the read-only mirror of GitLab located at &lt;a href=&quot;https://gitlab.com/gitlab-org/gitlab-foss/&quot;&gt;https://gitlab.com/gitlab-org/gitlab-foss/&lt;/a&gt;. However, please do not submit any issues and/or merge requests to that project.&lt;/p&gt; 
&lt;h2&gt;Free trial&lt;/h2&gt; 
&lt;p&gt;You can request a free trial of GitLab Ultimate &lt;a href=&quot;https://about.gitlab.com/free-trial/&quot;&gt;on our website&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Open source software to collaborate on code&lt;/h2&gt; 
&lt;p&gt;To see how GitLab looks please see the &lt;a href=&quot;https://about.gitlab.com/features/&quot;&gt;features page on our website&lt;/a&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Manage Git repositories with fine grained access controls that keep your code secure&lt;/li&gt; 
 &lt;li&gt;Perform code reviews and enhance collaboration with merge requests&lt;/li&gt; 
 &lt;li&gt;Complete continuous integration (CI) and continuous deployment/delivery (CD) pipelines to build, test, and deploy your applications&lt;/li&gt; 
 &lt;li&gt;Each project can also have an issue tracker, issue board, and a wiki&lt;/li&gt; 
 &lt;li&gt;Used by more than 100,000 organizations, GitLab is the most popular solution to manage Git repositories on-premises&lt;/li&gt; 
 &lt;li&gt;Open-core, most of the code is MIT with the files in &lt;code&gt;/ee&lt;/code&gt; being proprietary but source available and open for contributions.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Editions&lt;/h2&gt; 
&lt;p&gt;There are three editions of GitLab:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;GitLab Community Edition (CE) is available freely under the MIT Expat license.&lt;/li&gt; 
 &lt;li&gt;GitLab Enterprise Edition (EE) includes &lt;a href=&quot;https://about.gitlab.com/pricing/#compare-options&quot;&gt;extra features&lt;/a&gt; that are more useful for organizations with more than 100 users. To use EE and get official support please &lt;a href=&quot;https://about.gitlab.com/pricing/&quot;&gt;become a subscriber&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;JiHu Edition (JH) tailored specifically for the &lt;a href=&quot;https://about.gitlab.cn/&quot;&gt;Chinese market&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Licensing&lt;/h2&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://raw.githubusercontent.com/gitlabhq/gitlabhq/master/LICENSE&quot;&gt;LICENSE&lt;/a&gt; file for licensing information as it pertains to files in this repository.&lt;/p&gt; 
&lt;h2&gt;Hiring&lt;/h2&gt; 
&lt;p&gt;We are hiring developers, support engineers, and production engineers all the time, please see our &lt;a href=&quot;https://about.gitlab.com/jobs/&quot;&gt;jobs page&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Website&lt;/h2&gt; 
&lt;p&gt;On &lt;a href=&quot;https://about.gitlab.com/&quot;&gt;about.gitlab.com&lt;/a&gt; you can find more information about:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/pricing/&quot;&gt;Subscriptions&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/services/&quot;&gt;Professional Services&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/community/&quot;&gt;Community&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/gitlab-com/&quot;&gt;Hosted GitLab.com&lt;/a&gt; use GitLab as a free service&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/features/#enterprise&quot;&gt;GitLab Enterprise Edition&lt;/a&gt; with additional features aimed at larger organizations.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://about.gitlab.com/solutions/continuous-integration/&quot;&gt;GitLab CI&lt;/a&gt; a continuous integration (CI) server that is easy to integrate with GitLab.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Requirements&lt;/h2&gt; 
&lt;p&gt;Please see the &lt;a href=&quot;https://raw.githubusercontent.com/gitlabhq/gitlabhq/master/doc/install/requirements.md&quot;&gt;requirements documentation&lt;/a&gt; for system requirements and more information about the supported operating systems.&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;The recommended way to install GitLab is with the &lt;a href=&quot;https://docs.gitlab.com/install/package/&quot;&gt;Omnibus packages&lt;/a&gt; on our package server. Compared to &lt;a href=&quot;https://docs.gitlab.com/install/self_compiled/&quot;&gt;a self-compiled installation&lt;/a&gt;, this is faster and less error prone. Just select your operating system, download the respective package (Debian or RPM) and install it using the system&#39;s package manager.&lt;/p&gt; 
&lt;p&gt;For more information about other installation methods, see &lt;a href=&quot;https://about.gitlab.com/install/&quot;&gt;install GitLab&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;GitLab is an open source project and we are very happy to accept community contributions. Please refer to the &lt;a href=&quot;https://raw.githubusercontent.com/gitlabhq/gitlabhq/master/CONTRIBUTING.md&quot;&gt;&lt;code&gt;CONTRIBUTING.md&lt;/code&gt;&lt;/a&gt; file for more details.&lt;/p&gt; 
&lt;h2&gt;Install a development environment&lt;/h2&gt; 
&lt;p&gt;To work on GitLab itself, we recommend setting up your development environment with &lt;a href=&quot;https://gitlab.com/gitlab-org/gitlab-development-kit&quot;&gt;the GitLab Development Kit (GDK)&lt;/a&gt;. If you do not use GDK, you need to &lt;a href=&quot;https://docs.gitlab.com/install/installation/&quot;&gt;install and configure all the dependencies yourself&lt;/a&gt;, this is a lot of work and error prone. One small thing you also have to do when installing it yourself is to copy the example development Puma configuration file:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;cp config/puma.example.development.rb config/puma.rb
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Instructions on how to start GitLab and how to run the tests can be found in the &lt;a href=&quot;https://gitlab.com/gitlab-org/gitlab-development-kit#getting-started&quot;&gt;getting started section of the GitLab Development Kit&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Software stack&lt;/h2&gt; 
&lt;p&gt;GitLab is a Ruby on Rails application that runs on the following software:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Ubuntu/Debian/CentOS/RHEL/OpenSUSE&lt;/li&gt; 
 &lt;li&gt;Ruby (MRI) 3.3.10&lt;/li&gt; 
 &lt;li&gt;Git 2.33+&lt;/li&gt; 
 &lt;li&gt;Redis 6.0+&lt;/li&gt; 
 &lt;li&gt;PostgreSQL 16.5+&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For more information please see the &lt;a href=&quot;https://docs.gitlab.com/ee/development/architecture.html&quot;&gt;architecture&lt;/a&gt; and &lt;a href=&quot;https://docs.gitlab.com/ee/install/requirements.html&quot;&gt;requirements&lt;/a&gt; documentation.&lt;/p&gt; 
&lt;h2&gt;UX design&lt;/h2&gt; 
&lt;p&gt;Please adhere to the &lt;a href=&quot;https://design.gitlab.com/&quot;&gt;UX Guide&lt;/a&gt; when creating designs and implementing code.&lt;/p&gt; 
&lt;h2&gt;Third-party applications&lt;/h2&gt; 
&lt;p&gt;There are a lot of &lt;a href=&quot;https://about.gitlab.com/applications/&quot;&gt;third-party applications integrating with GitLab&lt;/a&gt;. These include GUI Git clients, mobile applications and API wrappers for various languages.&lt;/p&gt; 
&lt;h2&gt;GitLab release cycle&lt;/h2&gt; 
&lt;p&gt;For more information about the release process see the &lt;a href=&quot;https://gitlab.com/gitlab-org/release-tools/blob/master/README.md&quot;&gt;release documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Upgrading&lt;/h2&gt; 
&lt;p&gt;For upgrading information please see our &lt;a href=&quot;https://about.gitlab.com/update/&quot;&gt;update page&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;p&gt;All documentation can be found on &lt;a href=&quot;https://docs.gitlab.com&quot;&gt;https://docs.gitlab.com&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Education&lt;/h2&gt; 
&lt;p&gt;Get up to speed quickly with comprehensive learning resources at &lt;a href=&quot;https://university.gitlab.com&quot;&gt;GitLab University&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Getting help&lt;/h2&gt; 
&lt;p&gt;Please see &lt;a href=&quot;https://about.gitlab.com/getting-help/&quot;&gt;Getting help for GitLab&lt;/a&gt; on our website for the many options to get help.&lt;/p&gt; 
&lt;h2&gt;Why should I use GitLab?&lt;/h2&gt; 
&lt;p&gt;Read &lt;a href=&quot;https://about.gitlab.com/why-gitlab/&quot;&gt;why our customers choose GitLab&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>spree/spree</title>
      <link>https://github.com/spree/spree</link>
      <description>&lt;p&gt;Open Source eCommerce Platform for B2B, Marketplace, and Enterprise. REST API, TypeScript SDK, and production-ready Next.js storefront. Self-host it. Own your stack. No vendor lock-in. Zero platform fees.&lt;/p&gt;&lt;hr&gt;&lt;p&gt; &lt;a href=&quot;https://spreecommerce.org&quot;&gt; &lt;img src=&quot;https://spreecommerce.org/wp-content/themes/spree/images/logo.svg?sanitize=true&quot; alt=&quot;Spree Commerce open source headless eCommerce platform for B2B, Multi-vendor Marketplace, cross-border eCommerce, multi-tenant eCommerce&quot; width=&quot;250&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://spreecommerce.org&quot;&gt;Website&lt;/a&gt; · &lt;a href=&quot;https://console.spree.sh&quot;&gt;Free Sandbox&lt;/a&gt; · &lt;a href=&quot;https://github.com/spree/storefront&quot;&gt;Next.js Storefront&lt;/a&gt; · &lt;a href=&quot;https://spreecommerce.org/docs/&quot;&gt;Documentation&lt;/a&gt; · &lt;a href=&quot;https://spreecommerce.org/docs/api-reference/&quot;&gt;API&lt;/a&gt; · &lt;a href=&quot;https://github.com/spree/spree/milestones?direction=asc&amp;amp;sort=due_date&amp;amp;state=open&quot;&gt;Roadmap&lt;/a&gt; · &lt;a href=&quot;https://discord.spreecommerce.org&quot;&gt;Discord&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://rubygems.org/gems/spree&quot;&gt;&lt;img src=&quot;https://img.shields.io/gem/dt/spree&quot; alt=&quot;Gem Total Downloads&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://codecov.io/gh/spree/spree&quot;&gt;&lt;img src=&quot;https://codecov.io/gh/spree/spree/graph/badge.svg?token=DPFc7HbJvU&quot; alt=&quot;codecov&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opensource.org/licenses/BSD-3-Clause&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-BSD%203--Clause-blue.svg?sanitize=true&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Open-source headless eCommerce platform with a complete REST API, TypeScript SDK, and a production-ready Next.js storefront. BSD 3-Clause licensed — keep full ownership of your code, data, and infrastructure.&lt;/p&gt; 
&lt;p&gt;Everything you need to launch cross-border storefronts, B2B wholesale, or a custom commerce backend.&lt;/p&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;p&gt;The fastest way to try Spree is to &lt;a href=&quot;https://console.spree.sh&quot;&gt;create a free sandbox&lt;/a&gt; — a hosted Spree store with the Admin Dashboard and storefront, nothing to install.&lt;/p&gt; 
&lt;p&gt;To run Spree locally instead, copy and paste the following command to your terminal to set it up in 5 minutes:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npx create-spree-app@latest my-store
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This sets up the Spree Commerce backend, the Admin Dashboard, and the &lt;a href=&quot;https://github.com/spree/storefront&quot;&gt;Next.js storefront&lt;/a&gt; in a single project. The storefront is built with Next.js 16, React 19, Tailwind CSS 4, and TypeScript.&lt;/p&gt; 
&lt;p&gt;You need to have Node.js (22+) installed and Docker running. Learn more in the &lt;a href=&quot;https://spreecommerce.org/docs/developer/getting-started/quickstart&quot;&gt;installation docs&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;If you like what you see, consider giving Spree a GitHub star ⭐&lt;/p&gt; 
&lt;p&gt;Thank you for supporting Spree open-source ❤️&lt;/p&gt; 
&lt;h3&gt;Agentic Development&lt;/h3&gt; 
&lt;p&gt;Building with an AI coding agent? Install the &lt;a href=&quot;https://github.com/spree/agent-skills&quot;&gt;Spree agent skills&lt;/a&gt; — they teach Claude Code, Cursor, Copilot, and 60+ other tools Spree&#39;s conventions, customization patterns, and upgrade flows:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npx skills add spree/agent-skills
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Then connect the &lt;a href=&quot;https://spreecommerce.org/docs/developer/agentic/mcp&quot;&gt;docs MCP server&lt;/a&gt; and let your agent build with you. Learn more in the &lt;a href=&quot;https://spreecommerce.org/docs/developer/agentic/overview&quot;&gt;Agentic Development docs&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Spree CLI&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/spree/spree/main/packages/cli&quot;&gt;&lt;code&gt;@spree/cli&lt;/code&gt;&lt;/a&gt; manages your Spree project from the terminal — boot the stack, run generators and migrations, tail logs — and calls the &lt;strong&gt;Admin API&lt;/strong&gt; directly with simple &lt;code&gt;get&lt;/code&gt;/&lt;code&gt;post&lt;/code&gt;/&lt;code&gt;patch&lt;/code&gt;/&lt;code&gt;delete&lt;/code&gt; commands. It&#39;s a fast way to inspect and script your store, and works hands-free for AI agents (zero-config credentials in local dev):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;spree dev                                                            # boot the project (web + worker + db)
spree generate api_resource Brand name:string description:rich_text  #  Creates full API endpoints, models and database schema for a Brand resource
spree api get /orders -q status_eq=complete --limit 10               # query the Admin API
spree api post /products -d &#39;{&quot;name&quot;:&quot;Classic Tee&quot;,&quot;prices&quot;:[{&quot;currency&quot;:&quot;USD&quot;,&quot;amount&quot;:&quot;29.99&quot;}]}&#39;  # create resources
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;spree api endpoints&lt;/code&gt; and &lt;code&gt;spree api schema&lt;/code&gt; explore the full API offline. See the &lt;a href=&quot;https://spreecommerce.org/docs/developer/cli/quickstart&quot;&gt;CLI docs&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;p&gt;Everything below ships in this repository under the BSD 3-Clause license.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://spreecommerce.org/docs/api-reference/store-api/introduction&quot;&gt;REST API &amp;amp; TypeScript SDK&lt;/a&gt;&lt;/strong&gt; — production-grade REST API, publishable keys, rate limiting, and OpenAPI 3.0 spec. The &lt;a href=&quot;https://spreecommerce.org/docs/developer/sdk/quickstart&quot;&gt;TypeScript SDK&lt;/a&gt; adds autocomplete and type safety.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://spreecommerce.org/docs/developer/cli/quickstart&quot;&gt;Spree CLI&lt;/a&gt;&lt;/strong&gt; — manage projects from the terminal (boot, generate, migrate, upgrade) and call the Admin API directly with &lt;code&gt;spree api get/post/...&lt;/code&gt; — zero-config in local dev, built for scripts and AI agents.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/spree/storefront&quot;&gt;Next.js Storefront&lt;/a&gt;&lt;/strong&gt; — open-source storefront built with Next.js 16, React 19, Tailwind CSS 4, and TypeScript. Full shopping experience, multi-region URL routing, Stripe payments (Apple Pay, Google Pay, Klarna, Affirm), customer accounts, and SEO built in. &lt;a href=&quot;https://demo.spreecommerce.org/&quot;&gt;Try the demo&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://spreecommerce.org/docs/user/settings/markets&quot;&gt;Cross-Border Commerce&lt;/a&gt;&lt;/strong&gt; — Markets bundle currency, language, payment methods, and shipping rules per country. Translations Center for bulk product localization. EU Omnibus Directive compliance with automatic 30-day price history.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://spreecommerce.org/docs/developer/core-concepts/products#price-lists&quot;&gt;B2B &amp;amp; Wholesale&lt;/a&gt;&lt;/strong&gt; — &lt;a href=&quot;https://spreecommerce.org/docs/developer/core-concepts/products#price-lists&quot;&gt;Price Lists&lt;/a&gt; for regional, B2B, and wholesale pricing. &lt;a href=&quot;https://spreecommerce.org/docs/user/customers/customer-groups&quot;&gt;Customer Groups&lt;/a&gt; for segmentation. Companies, company locations, and company contacts for buyer organizations. Catalogs for curated, per-segment product assortments. Gated storefronts via publishable keys.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://spreecommerce.org/docs/developer/core-concepts/channels&quot;&gt;Sales Channels&lt;/a&gt;&lt;/strong&gt; — run multiple storefronts, Points of Sale, B2B panels, mobile apps off a single Spree backend, each with its products, pricing, payment methods, and shipping rules&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://spreecommerce.org/docs/developer/core-concepts/payments&quot;&gt;Payment Sessions&lt;/a&gt;&lt;/strong&gt; — provider-agnostic payment processing. Shipped with &lt;a href=&quot;https://spreecommerce.org/docs/integrations/payments/stripe&quot;&gt;Stripe&lt;/a&gt;, &lt;a href=&quot;https://spreecommerce.org/docs/integrations/payments/adyen&quot;&gt;Adyen&lt;/a&gt; and &lt;a href=&quot;https://spreecommerce.org/docs/integrations/payments/paypal&quot;&gt;PayPal&lt;/a&gt; plugins ready to use with Next.js storefront. Add your own with the &lt;a href=&quot;https://spreecommerce.org/docs/developer/how-to/custom-payment-method&quot;&gt;Payment Provider SDK&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://spreecommerce.org/docs/user/promotions/create-a-promotion&quot;&gt;Promotions &amp;amp; Gift Cards&lt;/a&gt;&lt;/strong&gt; — advanced rules-based promotions engine and native &lt;a href=&quot;https://spreecommerce.org/docs/developer/core-concepts/store-credits-gift-cards&quot;&gt;Gift Cards&lt;/a&gt; support.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Products &amp;amp; Catalog&lt;/strong&gt; — &lt;a href=&quot;https://spreecommerce.org/docs/developer/core-concepts/metafields&quot;&gt;Metafields&lt;/a&gt;, &lt;a href=&quot;https://spreecommerce.org/docs/user/manage-products/import-products&quot;&gt;CSV importer/exporter&lt;/a&gt;, digital products, product tags, &lt;a href=&quot;https://spreecommerce.org/docs/user/manage-products/bulk-product-operations&quot;&gt;bulk operations&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://spreecommerce.org/docs/integrations/search/meilisearch&quot;&gt;MeiliSearch Integration&lt;/a&gt;&lt;/strong&gt; — typo-tolerant product search and faceted filtering.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Admin Dashboard&lt;/strong&gt; — built with &lt;a href=&quot;https://spreecommerce.org/docs/developer/admin/custom-css&quot;&gt;Tailwind CSS&lt;/a&gt; with &lt;a href=&quot;https://spreecommerce.org/docs/developer/customization/permissions&quot;&gt;role-based permissions&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Integrations &amp;amp; Extensibility&lt;/strong&gt; — &lt;a href=&quot;https://spreecommerce.org/docs/developer/core-concepts/events&quot;&gt;Event Bus&lt;/a&gt;, &lt;a href=&quot;https://spreecommerce.org/docs/developer/core-concepts/webhooks&quot;&gt;Webhooks 2.0&lt;/a&gt;, native integrations (&lt;a href=&quot;https://spreecommerce.org/docs/integrations/analytics/google-analytics&quot;&gt;GA4&lt;/a&gt;, &lt;a href=&quot;https://spreecommerce.org/docs/integrations/analytics/google-tag-manager&quot;&gt;GTM&lt;/a&gt;, &lt;a href=&quot;https://spreecommerce.org/docs/integrations/marketing/klaviyo&quot;&gt;Klaviyo&lt;/a&gt;).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://spreecommerce.org/docs/developer/agentic/overview&quot;&gt;Agentic Development&lt;/a&gt;&lt;/strong&gt; — &lt;a href=&quot;https://github.com/spree/agent-skills&quot;&gt;25 agent skills&lt;/a&gt; (&lt;code&gt;npx skills add spree/agent-skills&lt;/code&gt;) teaching AI coding agents Spree&#39;s conventions, a &lt;a href=&quot;https://spreecommerce.org/docs/developer/agentic/mcp&quot;&gt;docs MCP server&lt;/a&gt;, &lt;a href=&quot;https://spreecommerce.org/docs/developer/agentic/llm-docs&quot;&gt;LLM-ready documentation&lt;/a&gt; (llms.txt, per-page Markdown, offline npm package), and a generated &lt;a href=&quot;http://AGENTS.md/CLAUDE.md&quot;&gt;AGENTS.md/CLAUDE.md&lt;/a&gt; in every scaffolded project.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Deployment&lt;/h2&gt; 
&lt;p&gt;Spree backend can be deployed everywhere, on cloud, on prem or VPS. We provide official Docker images and Dockerfiles so you can use AWS, Azure, GCP, Render, Railway, &lt;a href=&quot;http://Fly.io&quot;&gt;Fly.io&lt;/a&gt;, Heroku, or any other Docker-compatible host. The Next.js storefront can be deployed to Vercel, Netlify, or any Node.js host. &lt;a href=&quot;https://spreecommerce.org/docs/developer/deployment&quot;&gt;See the Deployment Documentation&lt;/a&gt; for more details.&lt;/p&gt; 
&lt;p&gt;If you want to quickly evaluate Spree, you can use the &lt;a href=&quot;https://console.spree.sh&quot;&gt;free sandbox&lt;/a&gt; — a hosted Spree store with the Admin Dashboard and storefront, nothing to install.&lt;/p&gt; 
&lt;h2&gt;Screenshots&lt;/h2&gt; 
&lt;h3&gt;&lt;a href=&quot;https://github.com/spree/storefront&quot;&gt;Next.js eCommerce Storefront&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;A production-ready, open-source storefront built with Next.js 16, React 19, and TypeScript. Fork it, customize it, deploy it. &lt;a href=&quot;https://demo.spreecommerce.org/&quot;&gt;Try the live demo&lt;/a&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;tbody&gt;
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://demo.spreecommerce.org/&quot;&gt;&lt;img src=&quot;https://spreecommerce.org/wp-content/uploads/2026/04/Spree-Commerce-Next.js-Storefront-Homepage.webp&quot; alt=&quot;Spree Commerce - Next.js Storefront - Home&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://demo.spreecommerce.org/&quot;&gt;&lt;img src=&quot;https://spreecommerce.org/wp-content/uploads/2026/04/Spree-Commerce-Next.js-Storefront-Product-Detail-Page-PDP.webp&quot; alt=&quot;Spree Commerce - Next.js Storefront - Product&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://demo.spreecommerce.org/&quot;&gt;&lt;img src=&quot;https://spreecommerce.org/wp-content/uploads/2026/04/Spree-Commerce-Next.js-Storefront-PageSpeed-Lighthouse.webp&quot; alt=&quot;Spree Commerce - Next.js Storefront - Lighthouse&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt;
&lt;/table&gt; 
&lt;h3&gt;&lt;a href=&quot;https://spreecommerce.org/multi-region-ecommerce/&quot;&gt;Cross-border eCommerce&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;Sell in multiple markets with local currencies, languages, payment methods, and shipping rules. Markets bundle per-country configuration so each customer sees a localized storefront from a single platform.&lt;/p&gt; 
&lt;img alt=&quot;Spree Commerce - Cross-border eCommerce&quot; src=&quot;https://spreecommerce.org/wp-content/uploads/2024/07/multi-region-country-shopping-1024x575.webp&quot; width=&quot;600&quot; /&gt; 
&lt;h3&gt;&lt;a href=&quot;https://spreecommerce.org/use-cases/wholesale-ecommerce/&quot;&gt;Wholesale &amp;amp; B2B Pricing&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;Price Lists, Customer Groups, and gated storefronts. Sell to multiple customer segments with the right assortment and pricing per segment.&lt;/p&gt; 
&lt;img src=&quot;https://github.com/spree/spree/assets/12614496/bac1e551-f629-47d6-a983-b385aa65b1bd&quot; alt=&quot;Spree Commerce - Wholesale eCommerce Platform&quot; width=&quot;600&quot; /&gt; 
&lt;h3&gt;&lt;a href=&quot;https://spreecommerce.org/marketplace-ecommerce/&quot;&gt;Multi-vendor Marketplace&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;Launch a multi-vendor marketplace with vendor accounts, product catalog curation, split payments, vendor payouts, and commission management. The Enterprise Edition adds automated vendor onboarding (Shopify, WooCommerce sync) and Stripe Connect / Adyen for Platforms integrations.&lt;/p&gt; 
&lt;img alt=&quot;Spree Commerce - Multi-vendor Marketplace eCommerce&quot; src=&quot;https://github.com/spree/spree/assets/12614496/c4ddd118-df4c-464e-b1fe-d43862e5cf25&quot; width=&quot;600&quot; /&gt; 
&lt;h2&gt;Community &amp;amp; Contributing&lt;/h2&gt; 
&lt;p&gt;Spree is an open-source project, and we love contributions in any form — pull requests, issues, feature ideas.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Follow our &lt;a href=&quot;https://spreecommerce.org/docs/developer/contributing/quickstart&quot;&gt;Contributing Guide&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://discord.spreecommerce.org&quot;&gt;Join our Discord&lt;/a&gt; to meet other community members&lt;/li&gt; 
 &lt;li&gt;Browse the &lt;a href=&quot;https://github.com/spree/spree/milestones?direction=asc&amp;amp;sort=due_date&amp;amp;state=open&quot;&gt;Roadmap&lt;/a&gt; and open &lt;a href=&quot;https://github.com/spree/spree/issues&quot;&gt;Issues&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Spree Enterprise Edition&lt;/h2&gt; 
&lt;p&gt;Spree is built and maintained by a funded team behind the open-source project. Beyond the open-source Core, we offer a paid &lt;a href=&quot;https://spreecommerce.org/enterprise/&quot;&gt;Enterprise Edition&lt;/a&gt; for organizations that need additional modules and SLA-backed support.&lt;/p&gt; 
&lt;p&gt;Enterprise Edition is built on top of the same open-source REST API and BSD 3-Clause Core, so your team keeps full ownership of the code, the data, and the infrastructure. Zero platform fees. Zero transaction fees.&lt;/p&gt; 
&lt;h3&gt;What&#39;s in Core vs. Enterprise&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Capability&lt;/th&gt; 
   &lt;th&gt;Open-source (this repo)&lt;/th&gt; 
   &lt;th&gt;Enterprise Edition&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;REST API&lt;/strong&gt;, &lt;strong&gt;TypeScript SDK&lt;/strong&gt;, Next.js storefront&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Sales Channels&lt;/strong&gt;, &lt;strong&gt;Markets&lt;/strong&gt;, cross-border, multi-currency&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Promotions&lt;/strong&gt;, &lt;strong&gt;Gift Cards&lt;/strong&gt;, &lt;strong&gt;Digital Products&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Payment integrations: &lt;strong&gt;Stripe&lt;/strong&gt;, &lt;strong&gt;Adyen&lt;/strong&gt;, &lt;strong&gt;PayPal&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Automatic tax calculation with &lt;strong&gt;Avatax&lt;/strong&gt; &amp;amp; &lt;strong&gt;Stripe Tax&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;B2B &amp;amp; Wholesale&lt;/strong&gt; — Price Lists, Customer Groups, gated storefronts&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;B2B Buyer organizations&lt;/strong&gt; (companies, locations, contacts)&lt;/td&gt; 
   &lt;td&gt;Coming soon in Spree 6.0&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;B2B Catalogs&lt;/strong&gt; — curated per-segment product assortments&lt;/td&gt; 
   &lt;td&gt;Coming soon in Spree 6.0&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;B2B approval workflows &amp;amp; ERP integrations&lt;/strong&gt; — role-based approval chains, procurement and ERP connectors&lt;/td&gt; 
   &lt;td&gt;—&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Multi-vendor Marketplace&lt;/strong&gt; — vendor onboarding, vendor panel, commissions, split payments, vendor payouts&lt;/td&gt; 
   &lt;td&gt;Coming soon in Spree 6.0&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Marketplace automations&lt;/strong&gt; — Shopify/WooCommerce vendor sync, Stripe Connect onboarding, automated commission rules, advanced reporting&lt;/td&gt; 
   &lt;td&gt;—&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Multi-tenant SaaS&lt;/strong&gt; — super-admin layer, tenant provisioning, white-label billing, central operations across hundreds of tenant stores&lt;/td&gt; 
   &lt;td&gt;—&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Enterprise security&lt;/strong&gt; — SSO (SAML/OIDC), encryption at-rest, audit logging, PCI-compliant architecture&lt;/td&gt; 
   &lt;td&gt;—&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;SLA support&lt;/strong&gt; — dedicated success manager, guaranteed response times, LTS releases, 24/7 monitoring&lt;/td&gt; 
   &lt;td&gt;—&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;a href=&quot;https://spreecommerce.org/contact/&quot;&gt;Contact our Sales team&lt;/a&gt; for an Enterprise Edition demo, or &lt;a href=&quot;https://discord.spreecommerce.org&quot;&gt;join Discord&lt;/a&gt; to use the open-source edition with the community.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;Spree Commerce core code in the &lt;strong&gt;&lt;a href=&quot;https://github.com/spree/spree&quot;&gt;spree/spree&lt;/a&gt;&lt;/strong&gt; repository is released under the free, open-source &lt;a href=&quot;https://opensource.org/license/bsd-3-clause&quot;&gt;BSD-3-Clause&lt;/a&gt; license (&lt;a href=&quot;https://github.com/spree/spree/raw/main/LICENSE&quot;&gt;LICENSE&lt;/a&gt;).&lt;/p&gt; 
&lt;p&gt;If you like what you see, consider giving Spree a GitHub star ⭐&lt;/p&gt; 
&lt;p&gt;Thank you for supporting Spree open-source ❤️&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>basecamp/once-campfire</title>
      <link>https://github.com/basecamp/once-campfire</link>
      <description>&lt;p&gt;Super simple group chat, without a subscription&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Campfire&lt;/h1&gt; 
&lt;p&gt;Campfire is a web-based chat application. It supports many of the features you&#39;d expect, including:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Multiple rooms, with access controls&lt;/li&gt; 
 &lt;li&gt;Direct messages&lt;/li&gt; 
 &lt;li&gt;File attachments with previews&lt;/li&gt; 
 &lt;li&gt;Search&lt;/li&gt; 
 &lt;li&gt;Notifications (via Web Push)&lt;/li&gt; 
 &lt;li&gt;@mentions&lt;/li&gt; 
 &lt;li&gt;API, with support for bot integrations&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Running your own Campfire instance&lt;/h2&gt; 
&lt;p&gt;Campfire&#39;s Docker image contains everything needed for a fully-functional, single-machine deployment. This includes the web app, background jobs, caching, file serving, and SSL. You can use our pre-built image at &lt;code&gt;ghcr.io/basecamp/once-campfire:latest&lt;/code&gt;, or build your own from this repo.&lt;/p&gt; 
&lt;h3&gt;Deploying with ONCE&lt;/h3&gt; 
&lt;p&gt;The easiest way to self-host Campfire is with &lt;a href=&quot;https://github.com/basecamp/once&quot;&gt;ONCE&lt;/a&gt;. It will guide you through the initial set up and then keep your instance up to date automatically.&lt;/p&gt; 
&lt;p&gt;If you don&#39;t already have &lt;code&gt;once&lt;/code&gt; installed, run this on the machine you want to run Campfire on:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;curl https://get.once.com | sh
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;once&lt;/code&gt; will launch as soon as the install is finished.&lt;/p&gt; 
&lt;p&gt;Choose Campfire from the list of applications, follow the instructions, and ONCE will take care of the rest.&lt;/p&gt; 
&lt;p&gt;If you prefer the command line to the dashboard, you can deploy directly:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;once deploy ghcr.io/basecamp/once-campfire --host chat.example.com
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Deploying with Docker&lt;/h3&gt; 
&lt;p&gt;If you&#39;d rather run the Docker image yourself, you can read more about that in the &lt;a href=&quot;https://raw.githubusercontent.com/basecamp/once-campfire/main/docs/self-hosting.md&quot;&gt;self-hosting guide&lt;/a&gt;.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;When you start Campfire for the first time, you&#39;ll be guided through a wizard to create an admin account. The email address that you enter for the admin account will be visible on the sign-in page, it&#39;s there so that people have someone to contact if they need help with their account. If that bothers you, put in any email address you want and create yourself a new admin account.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Development&lt;/h2&gt; 
&lt;p&gt;You are welcome - and encouraged - to modify Campfire to your liking. Please see our &lt;a href=&quot;https://raw.githubusercontent.com/basecamp/once-campfire/main/docs/development.md&quot;&gt;development guide&lt;/a&gt; for how to get Campfire set up for local development.&lt;/p&gt; 
&lt;h2&gt;Security&lt;/h2&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/basecamp/once-campfire/main/SECURITY.md&quot;&gt;SECURITY.md&lt;/a&gt; for how to report a vulnerability and a description of our trust model.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>huginn/huginn</title>
      <link>https://github.com/huginn/huginn</link>
      <description>&lt;p&gt;Create agents that monitor and act on your behalf. Your agents are standing by!&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;img src=&quot;https://raw.github.com/huginn/huginn/master/media/huginn-logo.png&quot; alt=&quot;Huginn&quot; title=&quot;Your agents are standing by.&quot; /&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;What is Huginn?&lt;/h2&gt; 
&lt;p&gt;Huginn is a system for building agents that perform automated tasks for you online. They can read the web, watch for events, and take actions on your behalf. Huginn&#39;s Agents create and consume events, propagating them along a directed graph. Think of it as a hackable version of IFTTT or Zapier on your own server. You always know who has your data. You do.&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/huginn/huginn/master/doc/imgs/the-name.png&quot; alt=&quot;the origin of the name&quot; /&gt;&lt;/p&gt; 
&lt;h4&gt;Here are some of the things that you can do with Huginn:&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;Track the weather and get an email when it&#39;s going to rain (or snow) tomorrow (&quot;Don&#39;t forget your umbrella!&quot;)&lt;/li&gt; 
 &lt;li&gt;List terms that you care about and receive email when their occurrence on Twitter changes. (For example, want to know when something interesting has happened in the world of Machine Learning? Huginn will watch the term &quot;machine learning&quot; on Twitter and tell you when there is a spike in discussion.)&lt;/li&gt; 
 &lt;li&gt;Watch for air travel or shopping deals&lt;/li&gt; 
 &lt;li&gt;Follow your project names on Twitter and get updates when people mention them&lt;/li&gt; 
 &lt;li&gt;Scrape websites and receive email when they change&lt;/li&gt; 
 &lt;li&gt;Connect to HipChat, FTP, IMAP, Jabber, JIRA, MQTT, nextbus, Pushbullet, Pushover, RSS, Bash, Slack, StubHub, translation APIs, Twilio, Twitter, and Weibo, to name a few.&lt;/li&gt; 
 &lt;li&gt;Send digest email with things that you care about at specific times during the day&lt;/li&gt; 
 &lt;li&gt;Track counts of high frequency events and send an SMS within moments when they spike, such as the term &quot;san francisco emergency&quot;&lt;/li&gt; 
 &lt;li&gt;Send and receive WebHooks&lt;/li&gt; 
 &lt;li&gt;Run custom JavaScript functions&lt;/li&gt; 
 &lt;li&gt;Track your location over time&lt;/li&gt; 
 &lt;li&gt;Create Amazon Mechanical Turk workflows as the inputs, or outputs, of agents (the Amazon Turk Agent is called the &quot;HumanTaskAgent&quot;). For example: &quot;Once a day, ask 5 people for a funny cat photo; send the results to 5 more people to be rated; send the top-rated photo to 5 people for a funny caption; send to 5 final people to rate for funniest caption; finally, post the best captioned photo on my blog.&quot;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;a href=&quot;https://gitter.im/huginn/huginn?utm_source=badge&amp;amp;utm_medium=badge&amp;amp;utm_campaign=pr-badge&amp;amp;utm_content=badge&quot;&gt;&lt;img src=&quot;https://badges.gitter.im/Join%20Chat.svg?sanitize=true&quot; alt=&quot;Gitter&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://changelog.com/podcast/199&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/changelog-%23199-lightgrey.svg?sanitize=true&quot; alt=&quot;Changelog #199&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Join us in our &lt;a href=&quot;https://gitter.im/huginn/huginn&quot;&gt;Gitter room&lt;/a&gt; to discuss the project.&lt;/p&gt; 
&lt;h3&gt;Join us!&lt;/h3&gt; 
&lt;p&gt;Want to help with Huginn? All contributions are encouraged! You could make UI improvements, &lt;a href=&quot;https://github.com/huginn/huginn/wiki/Creating-a-new-agent&quot;&gt;add new Agents&lt;/a&gt;, write &lt;a href=&quot;https://github.com/huginn/huginn/wiki&quot;&gt;documentation and tutorials&lt;/a&gt;, or try tackling &lt;a href=&quot;https://github.com/huginn/huginn/issues?direction=desc&amp;amp;labels=help+wanted&amp;amp;page=1&amp;amp;sort=created&amp;amp;state=open&quot;&gt;issues tagged with #&quot;help wanted&quot;&lt;/a&gt;. Please fork, add specs, and send pull requests!&lt;/p&gt; 
&lt;p&gt;Have an awesome idea but not feeling quite up to contributing yet? Head over to our &lt;a href=&quot;https://github.com/huginn/huginn/issues/353&quot;&gt;Official &#39;suggest an agent&#39; thread &lt;/a&gt; and tell us!&lt;/p&gt; 
&lt;h2&gt;Examples&lt;/h2&gt; 
&lt;p&gt;Please checkout the &lt;a href=&quot;http://vimeo.com/61976251&quot;&gt;Huginn Introductory Screencast&lt;/a&gt;!&lt;/p&gt; 
&lt;p&gt;And now, some example screenshots. Below them are instructions to get you started.&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/huginn/huginn/master/doc/imgs/your-agents.png&quot; alt=&quot;Example list of agents&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/huginn/huginn/master/doc/imgs/diagram.png&quot; alt=&quot;Event flow diagram&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/huginn/huginn/master/doc/imgs/peaks.png&quot; alt=&quot;Detecting peaks in Twitter&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/huginn/huginn/master/doc/imgs/my-locations.png&quot; alt=&quot;Logging your location over time&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/huginn/huginn/master/doc/imgs/new-agent.png&quot; alt=&quot;Making a new agent&quot; /&gt;&lt;/p&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;h3&gt;Docker&lt;/h3&gt; 
&lt;p&gt;The quickest and easiest way to check out Huginn is to use the official Docker image. Have a look at the &lt;a href=&quot;https://github.com/huginn/huginn/raw/master/doc/docker/install.md&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Local Installation&lt;/h3&gt; 
&lt;p&gt;If you just want to play around, you can simply fork this repository, then perform the following steps:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Run &lt;code&gt;git remote add upstream https://github.com/huginn/huginn.git&lt;/code&gt; to add the main repository as a remote for your fork.&lt;/li&gt; 
 &lt;li&gt;Copy &lt;code&gt;.env.example&lt;/code&gt; to &lt;code&gt;.env&lt;/code&gt; (&lt;code&gt;cp .env.example .env&lt;/code&gt;) and edit &lt;code&gt;.env&lt;/code&gt;, at least updating the &lt;code&gt;APP_SECRET_TOKEN&lt;/code&gt; variable.&lt;/li&gt; 
 &lt;li&gt;Make sure that you have MySQL or PostgreSQL installed. (On a Mac, the easiest way is with &lt;a href=&quot;http://brew.sh/&quot;&gt;Homebrew&lt;/a&gt;. If you&#39;re going to use PostgreSQL, you&#39;ll need to prepend all commands below with &lt;code&gt;DATABASE_ADAPTER=postgresql&lt;/code&gt;.)&lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;bundle&lt;/code&gt; to install dependencies&lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;bundle exec rake db:create&lt;/code&gt;, &lt;code&gt;bundle exec rake db:migrate&lt;/code&gt;, and then &lt;code&gt;bundle exec rake db:seed&lt;/code&gt; to create a development database with some example Agents.&lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;bundle exec foreman start&lt;/code&gt;, visit &lt;a href=&quot;http://localhost:3000/&quot;&gt;http://localhost:3000/&lt;/a&gt;, and login with the username of &lt;code&gt;admin&lt;/code&gt; and the password of &lt;code&gt;password&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Setup some Agents!&lt;/li&gt; 
 &lt;li&gt;Read the &lt;a href=&quot;https://github.com/huginn/huginn/wiki&quot;&gt;wiki&lt;/a&gt; for usage examples and to get started making new Agents.&lt;/li&gt; 
 &lt;li&gt;Periodically run &lt;code&gt;git fetch upstream&lt;/code&gt; and then &lt;code&gt;git checkout master &amp;amp;&amp;amp; git merge upstream/master&lt;/code&gt; to merge in the newest version of Huginn.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Note: By default, email messages are intercepted in the &lt;code&gt;development&lt;/code&gt; Rails environment, which is what you just setup. You can view them at &lt;a href=&quot;http://localhost:3000/letter_opener&quot;&gt;http://localhost:3000/letter_opener&lt;/a&gt;. If you&#39;d like to send real email via SMTP when playing with Huginn locally, set &lt;code&gt;SEND_EMAIL_IN_DEVELOPMENT&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; in your &lt;code&gt;.env&lt;/code&gt; file.&lt;/p&gt; 
&lt;p&gt;If you need more detailed instructions, see the &lt;a href=&quot;https://github.com/huginn/huginn/wiki/Novice-setup-guide&quot;&gt;Novice setup guide&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Develop&lt;/h3&gt; 
&lt;p&gt;All agents have specs! And there&#39;s also acceptance tests that simulate running Huginn in a headless browser.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Install Google Chrome and ChromeDriver for local feature specs&lt;/li&gt; 
 &lt;li&gt;Or use the Docker-based test environment in &lt;a href=&quot;https://raw.githubusercontent.com/huginn/huginn/master/docker/test/README.md&quot;&gt;&lt;code&gt;docker/test/README.md&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Run all specs with &lt;code&gt;bundle exec rspec&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Run a specific spec with &lt;code&gt;bundle exec rspec path/to/specific/test_spec.rb&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Read more about rspec for rails &lt;a href=&quot;https://github.com/rspec/rspec-rails&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Using Huginn Agent gems&lt;/h2&gt; 
&lt;p&gt;Huginn Agents can now be written as external gems and be added to your Huginn installation with the &lt;code&gt;ADDITIONAL_GEMS&lt;/code&gt; environment variable. See the &lt;code&gt;Additional Agent gems&lt;/code&gt; section of &lt;code&gt;.env.example&lt;/code&gt; for more information.&lt;/p&gt; 
&lt;p&gt;If you&#39;d like to write your own Huginn Agent Gem, please see &lt;a href=&quot;https://github.com/huginn/huginn_agent&quot;&gt;huginn_agent&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Our general intention is to encourage complex and specific Agents to be written as Gems, while continuing to add new general-purpose Agents to the core Huginn repository.&lt;/p&gt; 
&lt;h2&gt;Deployment&lt;/h2&gt; 
&lt;p&gt;Please see &lt;a href=&quot;https://github.com/huginn/huginn/wiki#deploying-huginn&quot;&gt;the Huginn Wiki&lt;/a&gt; for detailed deployment strategies for different providers.&lt;/p&gt; 
&lt;h3&gt;Heroku&lt;/h3&gt; 
&lt;p&gt;Try Huginn on Heroku: &lt;a href=&quot;https://heroku.com/deploy&quot;&gt;&lt;img src=&quot;https://www.herokucdn.com/deploy/button.png&quot; alt=&quot;Deploy&quot; /&gt;&lt;/a&gt; (Takes a few minutes to setup. Read the &lt;a href=&quot;https://github.com/huginn/huginn/raw/master/doc/heroku/install.md&quot;&gt;documentation&lt;/a&gt; while you are waiting and be sure to click &#39;View it&#39; after launch!) Huginn launches only on a paid subscription plan for Heroku. For non-experimental use, we strongly recommend Heroku&#39;s 1GB paid plan or our Docker container.&lt;/p&gt; 
&lt;h3&gt;OpenShift&lt;/h3&gt; 
&lt;h4&gt;OpenShift Online&lt;/h4&gt; 
&lt;p&gt;Try Huginn on OpenShift Online&lt;/p&gt; 
&lt;p&gt;Create a new app with either &lt;code&gt;mysql&lt;/code&gt; or &lt;code&gt;postgres&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;oc new-app -f https://raw.githubusercontent.com/huginn/huginn/master/openshift/templates/huginn-mysql.json
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;oc new-app -f https://raw.githubusercontent.com/huginn/huginn/master/openshift/templates/huginn-postgresql.json
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: You can also use the web console to import either json file by going to &quot;Add to Project&quot; -&amp;gt; &quot;Import YAML/JSON&quot;.&lt;/p&gt; 
&lt;p&gt;If you are on the Starter plan, make sure to follow the &lt;a href=&quot;https://docs.openshift.com/online/getting_started/beyond_the_basics.html#btb-creating-a-new-application-from-source-code&quot;&gt;guide&lt;/a&gt; to remove any existing application.&lt;/p&gt; 
&lt;p&gt;The templates should work on a v3 installation or the current v4 online.&lt;/p&gt; 
&lt;h3&gt;Manual installation on any server&lt;/h3&gt; 
&lt;p&gt;Have a look at the &lt;a href=&quot;https://github.com/huginn/huginn/raw/master/doc/manual/README.md&quot;&gt;installation guide&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Optional Setup&lt;/h3&gt; 
&lt;h4&gt;Setup for private development&lt;/h4&gt; 
&lt;p&gt;See &lt;a href=&quot;https://github.com/huginn/huginn/wiki/Private-development-instructions&quot;&gt;private development instructions&lt;/a&gt; on the wiki.&lt;/p&gt; 
&lt;h4&gt;Enable the WeatherAgent&lt;/h4&gt; 
&lt;p&gt;In order to use the WeatherAgent you need an &lt;a href=&quot;https://pirate-weather.apiable.io/products/weather-data&quot;&gt;Weather Data API key from Pirate Weather&lt;/a&gt;. Sign up for one and then change the value of &lt;code&gt;api_key: your-key&lt;/code&gt; in your seeded WeatherAgent.&lt;/p&gt; 
&lt;h4&gt;Disable SSL&lt;/h4&gt; 
&lt;p&gt;We assume your deployment will run over SSL. This is a very good idea! However, if you wish to turn this off, you&#39;ll probably need to edit &lt;code&gt;config/initializers/devise.rb&lt;/code&gt; and modify the line containing &lt;code&gt;config.rememberable_options = { :secure =&amp;gt; true }&lt;/code&gt;. You will also need to edit &lt;code&gt;config/environments/production.rb&lt;/code&gt; and modify the value of &lt;code&gt;config.force_ssl&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;Huginn is provided under the MIT License.&lt;/p&gt; 
&lt;p&gt;Huginn was originally created by &lt;a href=&quot;https://github.com/cantino&quot;&gt;@cantino&lt;/a&gt; in 2013. Since then, many people&#39;s dedicated contributions have made it what it is today.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/huginn/huginn/actions/workflows/ci.yml&quot;&gt;&lt;img src=&quot;https://github.com/huginn/huginn/actions/workflows/ci.yml/badge.svg?sanitize=true&quot; alt=&quot;CI&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://coveralls.io/r/huginn/huginn&quot;&gt;&lt;img src=&quot;https://coveralls.io/repos/huginn/huginn/badge.svg?sanitize=true&quot; alt=&quot;Coverage Status&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Homebrew/homebrew-core</title>
      <link>https://github.com/Homebrew/homebrew-core</link>
      <description>&lt;p&gt;🍻 Default and OSS formulae (built-from-source packages) for the package manager for everywhere&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Homebrew Core&lt;/h1&gt; 
&lt;p&gt;Core formulae for the Homebrew package manager.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/orgs/Homebrew/discussions&quot;&gt;Homebrew/discussions (forum)&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;How do I install these formulae?&lt;/h2&gt; 
&lt;p&gt;Just &lt;code&gt;brew install &amp;lt;formula&amp;gt;&lt;/code&gt;. This is the default tap for Homebrew and is installed by default.&lt;/p&gt; 
&lt;h2&gt;More Documentation, Troubleshooting, Contributing, Security, Community, Donations, License and Sponsors&lt;/h2&gt; 
&lt;p&gt;See these sections in &lt;a href=&quot;https://github.com/Homebrew/brew#homebrew&quot;&gt;Homebrew/brew&#39;s README&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
