{"id":1064,"name":"Farmbot","description":"Humanity's open-source CNC farming machine.","url":"https://github.com/FarmBot/Farmbot-Web-App","last_synced_at":"2026-04-12T04:30:44.856Z","repository":{"id":14928495,"uuid":"17652873","full_name":"FarmBot/Farmbot-Web-App","owner":"FarmBot","description":"Setup, customize, and control FarmBot from any device","archived":false,"fork":false,"pushed_at":"2025-10-24T23:02:36.000Z","size":69393,"stargazers_count":953,"open_issues_count":37,"forks_count":348,"subscribers_count":71,"default_branch":"staging","last_synced_at":"2025-10-28T19:41:17.724Z","etag":null,"topics":["farmbot"],"latest_commit_sha":null,"homepage":"https://my.farm.bot","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FarmBot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2014-03-12T02:38:25.000Z","updated_at":"2025-10-11T04:55:17.000Z","dependencies_parsed_at":"2023-09-21T19:14:45.741Z","dependency_job_id":"9c369800-468b-4175-b197-c0bb21c87515","html_url":"https://github.com/FarmBot/Farmbot-Web-App","commit_stats":{"total_commits":8384,"total_committers":42,"mean_commits":"199.61904761904762","dds":"0.26789122137404575","last_synced_commit":"7a6c4db039259139ce320cf2b9c1ce5ba2216f05"},"previous_names":[],"tags_count":197,"template":false,"template_full_name":null,"purl":"pkg:github/FarmBot/Farmbot-Web-App","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FarmBot%2FFarmbot-Web-App","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FarmBot%2FFarmbot-Web-App/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FarmBot%2FFarmbot-Web-App/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FarmBot%2FFarmbot-Web-App/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FarmBot","download_url":"https://codeload.github.com/FarmBot/Farmbot-Web-App/tar.gz/refs/heads/staging","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FarmBot%2FFarmbot-Web-App/sbom","scorecard":{"id":49309,"data":{"date":"2025-08-11","repo":{"name":"github.com/FarmBot/Farmbot-Web-App","commit":"f2f8d903fded5f652efcefa662d42d7b1bbd76ee"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":6.1,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: public/3D/lib/draco_decoder.wasm:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: docker_configs/api.Dockerfile:1: pin your Docker image by updating ruby:3.4.5 to ruby:3.4.5@sha256:04121e637d449ec6a93b4f4d05eef7bd55be4ffb04391127cab0999676c2de47","Warn: containerImage not pinned by hash: docker_configs/rabbitmq.Dockerfile:1: pin your Docker image by updating rabbitmq:4.0.4 to rabbitmq:4.0.4@sha256:ca3df60ab86fd74af2aac78c1868ea6b6d11ec1d1caed415b4690889fcf407d7","Info:   0 out of   2 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: all commits (1) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-vfm5-rmrh-j26v"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-14T23:24:05.041Z","repository_id":14928495,"created_at":"2025-08-14T23:24:05.041Z","updated_at":"2025-08-14T23:24:05.041Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281689404,"owners_count":26544632,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-29T02:00:06.901Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"FarmBot","name":"FarmBot","uuid":"5784869","kind":"organization","description":"Humanity's open-source CNC farming machine","email":null,"website":"https://farm.bot","location":null,"twitter":"farmbotio","company":null,"icon_url":"https://avatars.githubusercontent.com/u/5784869?v=4","repositories_count":8,"last_synced_at":"2023-08-09T23:50:36.602Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/FarmBot","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-06T22:34:47.347Z","updated_at":"2023-08-09T23:50:37.039Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FarmBot","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FarmBot/repositories"},"packages":[],"commits":{"id":1254582,"full_name":"FarmBot/Farmbot-Web-App","default_branch":"staging","total_commits":8773,"total_committers":43,"total_bot_commits":2,"total_bot_committers":1,"mean_commits":204.02325581395348,"dds":0.3003533568904594,"past_year_total_commits":365,"past_year_total_committers":4,"past_year_total_bot_commits":2,"past_year_total_bot_committers":1,"past_year_mean_commits":91.25,"past_year_dds":0.3671232876712329,"last_synced_at":"2025-10-29T06:48:45.508Z","last_synced_commit":"b2a8645548ce1d7a07355f2edf1121de79965c7a","created_at":"2023-03-27T11:49:52.980Z","updated_at":"2025-10-29T06:45:56.677Z","committers":[{"name":"Rick Carlino","email":"rick.carlino@gmail.com","login":"RickCarlino","count":6138},{"name":"gabrielburnworth","email":"gabrielburnworth","login":"gabrielburnworth","count":1980},{"name":"Rory Aronson","email":"rory@roryaronson.com","login":"roryaronson","count":275},{"name":"MrChristofferson","email":"chrisvan0848@gmail.com","login":"myarete","count":174},{"name":"Ascend","email":"AscendFB","login":"AscendFB","count":44},{"name":"Connor Rigby","email":"connor@farmbot.io","login":null,"count":31},{"name":"David","email":"criadopernia@gmail.com","login":"dcriado","count":17},{"name":"Harry Brundage","email":"harry.brundage@gmail.com","login":"airhorns","count":17},{"name":"Pitou","email":"pitou.games@gmail.com","login":"PitouGames","count":10},{"name":"Brenda Wallace","email":"brenda@wallace.net.nz","login":"Br3nda","count":9},{"name":"DDDIM","email":"faqmail@mail.ru","login":"DDDIM","count":9},{"name":"Connor Rigby","email":"konnorrigby@gmail.com","login":"ConnorRigby","count":8},{"name":"TimEvWw","email":"tim.evers@gmail.com","login":"TimEvWw","count":6},{"name":"Karey Higuera","email":"karey.higuera@gmail.com","login":"kbravh","count":5},{"name":"Fabio Dessi","email":"fabio.dessi@webnos.it","login":null,"count":4},{"name":"f-systemes","email":"62891083+f-systemes","login":"f-systemes","count":4},{"name":"Fabio Dessi","email":"fabio.dessi@webnos.i.t","login":null,"count":3},{"name":"Rick Carlino","email":"rickcarlino","login":"rickcarlino","count":3},{"name":"PrincesseLulu","email":"lucas.meriau@outlook.com","login":"PrincesseLulu","count":3},{"name":"Ghislaine Guerin","email":"ghislaine@assembla.com","login":null,"count":2},{"name":"Making GitHub Delicious","email":"iron@waffle.io","login":"waffle-iron","count":2},{"name":"ncnynl","email":"ncnynl@gmail.com","login":"ncnynl","count":2},{"name":"luisrampolla","email":"luis.rampolla@upr.edu","login":"rampollaluis","count":2},{"name":"copilot-swe-agent[bot]","email":"198982749+Copilot","login":"Copilot","count":2},{"name":"Sebastiano Pistore","email":"SebastianoPistore.info@protonmail.ch","login":"SebastianoPistore","count":2},{"name":"Allan Kimmer Jensen","email":"allankimmerjensen@gmail.com","login":"Saturate","count":2},{"name":"Darío Hereñú","email":"magallania@gmail.com","login":"kant","count":2},{"name":"Michael Ford","email":"fanquake","login":"fanquake","count":2},{"name":"nicmel","email":"nicolas.melchior@gmail.com","login":"nicmel","count":1},{"name":"Yuval Maman","email":"yuvilio@yahoo.com","login":"yuvilio","count":1},{"name":"C Reimers","email":"christoph@zweihundertsieben.de","login":null,"count":1},{"name":"Mike Russell","email":"mikedjrussell@gmail.com","login":null,"count":1},{"name":"MrChristofferson","email":"YOUR EMAIL ADDRESS","login":null,"count":1},{"name":"Rick Carlino","email":"rick@Ricks-MacBook-Pro.local","login":null,"count":1},{"name":"Wallerand Delevacq","email":"wallforfry@gmail.com","login":"wallforfry","count":1},{"name":"Nina Pitakwong","email":"ppitakwong@gmail.com","login":"NinaCarlino","count":1},{"name":"MarcRoland","email":"56369838+MarcRoland","login":"MarcRoland","count":1},{"name":"Jeffrey Fisher","email":"jeff@slofish.io","login":"jeffslofish","count":1},{"name":"HairyFotr","email":"hairyfotr@gmail.com","login":"HairyFotr","count":1},{"name":"Ennio Campagna","email":"32188702+HexNio","login":"HexNio","count":1},{"name":"Ender Ahmet Yurt","email":"enderyurt@gmail.com","login":"enderahmetyurt","count":1},{"name":"Bcchoi","email":"bcchoi@aspringcloud.com","login":"springcloud-bcchoi","count":1},{"name":"Alex Alicea","email":"48475528+alexgalicea","login":"alexgalicea","count":1}],"past_year_committers":[{"name":"gabrielburnworth","email":"gabrielburnworth","login":"gabrielburnworth","count":231},{"name":"Rory Aronson","email":"rory@roryaronson.com","login":"roryaronson","count":131},{"name":"copilot-swe-agent[bot]","email":"198982749+Copilot","login":"Copilot","count":2},{"name":"ncnynl","email":"ncnynl@gmail.com","login":"ncnynl","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/FarmBot%2FFarmbot-Web-App/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-10-30T00:00:25.810Z","repositories_count":6090177,"commits_count":922447893,"contributors_count":35979315,"owners_count":1109820,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"FarmBot/Farmbot-Web-App","html_url":"https://github.com/FarmBot/Farmbot-Web-App","last_synced_at":"2025-10-29T08:49:34.795Z","status":"active","issues_count":486,"pull_requests_count":2043,"avg_time_to_close_issue":16673782.560267856,"avg_time_to_close_pull_request":63771.07128810226,"issues_closed_count":448,"pull_requests_closed_count":2034,"pull_request_authors_count":50,"issue_authors_count":80,"avg_comments_per_issue":1.3024691358024691,"avg_comments_per_pull_request":1.3313754282917278,"merged_pull_requests_count":1934,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":2,"past_year_pull_requests_count":46,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":342960.175,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":40,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":2,"past_year_avg_comments_per_issue":0.5,"past_year_avg_comments_per_pull_request":0.6956521739130435,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":38,"created_at":"2023-05-09T10:40:58.139Z","updated_at":"2025-10-29T08:49:34.795Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/FarmBot%2FFarmbot-Web-App","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/FarmBot%2FFarmbot-Web-App/issues","issue_labels_count":{"enhancement":129,"feature":85,"good first issue":58,"Farm Designer":50,"bug":45,"high priority":22,"API change":18,"Sequences":18,"in progress":13,"ready":7,"Settings":7,"FBOS change":5,"Messages":4,"Controls":4,"question":3,"Logs":3,"Farmware":2,"CeleryScript change":2,"wont fix":2,"Archive?":1,"Photos":1},"pull_request_labels_count":{"enhancement":78,"bug":64,"feature":57,"in progress":16,"codex":6,"Sequences":2,"invalid":1,"Farm Designer":1,"Farmware":1,"Controls":1,"ready":1},"issue_author_associations_count":{"MEMBER":264,"NONE":119,"CONTRIBUTOR":102,"COLLABORATOR":1},"pull_request_author_associations_count":{"CONTRIBUTOR":1972,"MEMBER":50,"NONE":18,"COLLABORATOR":3},"issue_authors":{"roryaronson":264,"RickCarlino":63,"gabrielburnworth":17,"Klimbim1":10,"innovatemaker":8,"jsimmonds2":7,"AscendFB":6,"derletztename":5,"nicmel":5,"etcipnja":4,"PitouGames":4,"elbow-jason":3,"ThomasLegris":3,"creimers":3,"Arduns":2,"Abdullah7528":2,"GuidoCram":2,"linqingfeng":2,"tuananh2311":2,"pablomat":2,"Darchevil":2,"mmcnair91":2,"Br3nda":2,"Bunraku":2,"vindekator":2,"amerkay":2,"nichoguimbaolibot":2,"yunfan":2,"phrohdoh":2,"yyzzz6000":2,"mdingena":2,"carlosen14":2,"sportscar":1,"yuvilio":1,"muenchris":1,"eddielien":1,"nickydonna":1,"vroyer":1,"JordanOPStudent":1,"MarceloAlves":1,"jpmaidment":1,"patrickmuhi":1,"phillip-shvartsman":1,"patricknoack":1,"deep12650":1,"bahanni":1,"LeeSSXX":1,"peerera":1,"KyryloKaralyus":1,"gowthamgr-git":1,"IsmaelFelix":1,"KizziePig":1,"Kabooommuc":1,"airlinepilot":1,"chanwitG":1,"waldmannly":1,"alkhlama":1,"mdchia":1,"ConnorRigby":1,"muathime":1,"marcel-wiedemeier":1,"kc6esn":1,"bautze":1,"samghotra":1,"issamsham":1,"radoslav-stefanov":1,"ajoeofalltrades":1,"kulbir-ahluwalia":1,"katrinleinweber":1,"MikeTeddyOmondi":1,"ghost":1,"stre1026":1,"cmlogan":1,"zion2k":1,"Jan-Frase":1,"OrenGitHub":1,"dumielle":1,"enderahmetyurt":1,"avonwyss":1,"nichoguimbaolibot-ubidy":1},"pull_request_authors":{"RickCarlino":1197,"gabrielburnworth":676,"roryaronson":50,"AscendFB":15,"f-systemes":9,"DDDIM":9,"airhorns":7,"myarete":7,"PitouGames":6,"kant":6,"kbravh":5,"FabioDessi":4,"Br3nda":3,"ncnynl":3,"ConnorRigby":3,"willian-virgilio":2,"yuvilio":2,"SebastianoPistore":2,"fanquake":2,"PrincesseLulu":2,"nicmel":2,"gregorywaynepower":2,"lfgec":2,"Reesedog":1,"irishgordo":1,"rampollaluis":1,"NinaCarlino":1,"dcriado":1,"siddheshbomble":1,"keepcosmos":1,"HexNio":1,"MarcRoland":1,"zaxrok":1,"Klimbim1":1,"Saturate":1,"patagonaa":1,"jeffslofish":1,"wallforfry":1,"Doris12355":1,"prateepgedupudi":1,"HairyFotr":1,"jevenzh":1,"TimEvWw":1,"ffischer1984":1,"ghislaineguerin":1,"alexgalicea":1,"enderahmetyurt":1,"Copilot":1,"creimers":1,"waffle-iron":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-10-29T00:00:18.463Z","repositories_count":11242444,"issues_count":34943166,"pull_requests_count":113347232,"authors_count":11042040,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{"codex":6},"past_year_issue_author_associations_count":{"NONE":2},"past_year_pull_request_author_associations_count":{"CONTRIBUTOR":29,"MEMBER":17},"past_year_issue_authors":{"Jan-Frase":1,"jsimmonds2":1},"past_year_pull_request_authors":{"gabrielburnworth":27,"roryaronson":17,"Copilot":1,"ncnynl":1},"maintainers":[{"login":"roryaronson","count":314,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/roryaronson"},{"login":"ConnorRigby","count":4,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ConnorRigby"}],"active_maintainers":[{"login":"roryaronson","count":17,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/roryaronson"}]},"events":{"total":{"CreateEvent":109,"ReleaseEvent":12,"IssuesEvent":3,"WatchEvent":51,"DeleteEvent":91,"IssueCommentEvent":14,"PushEvent":287,"PullRequestReviewCommentEvent":1,"PullRequestReviewEvent":1,"PullRequestEvent":37,"ForkEvent":20},"last_year":{"CreateEvent":108,"ReleaseEvent":12,"IssuesEvent":3,"WatchEvent":50,"DeleteEvent":90,"IssueCommentEvent":14,"PushEvent":283,"PullRequestReviewCommentEvent":1,"PullRequestReviewEvent":1,"PullRequestEvent":37,"ForkEvent":18}},"keywords":["farmbot"],"dependencies":[{"ecosystem":"npm","filepath":"package.json","sha":null,"kind":"manifest","created_at":"2022-07-12T05:18:33.450Z","updated_at":"2022-07-12T05:18:33.450Z","repository_link":"https://github.com/FarmBot/Farmbot-Web-App/blob/staging/package.json","dependencies":[{"id":153205503,"package_name":"@blueprintjs/core","ecosystem":"npm","requirements":"4.5.1","direct":true,"kind":"runtime","optional":false},{"id":153205504,"package_name":"@blueprintjs/popover2","ecosystem":"npm","requirements":"1.4.1","direct":true,"kind":"runtime","optional":false},{"id":153205505,"package_name":"@blueprintjs/select","ecosystem":"npm","requirements":"4.4.1","direct":true,"kind":"runtime","optional":false},{"id":153205506,"package_name":"@monaco-editor/react","ecosystem":"npm","requirements":"4.4.5","direct":true,"kind":"runtime","optional":false},{"id":153205507,"package_name":"@parcel/transformer-sass","ecosystem":"npm","requirements":"2.6.2","direct":true,"kind":"runtime","optional":false},{"id":153205508,"package_name":"@parcel/transformer-typescript-tsc","ecosystem":"npm","requirements":"2.6.2","direct":true,"kind":"runtime","optional":false},{"id":153205509,"package_name":"@types/lodash","ecosystem":"npm","requirements":"4.14.182","direct":true,"kind":"runtime","optional":false},{"id":153205510,"package_name":"@types/markdown-it","ecosystem":"npm","requirements":"12.2.3","direct":true,"kind":"runtime","optional":false},{"id":153205511,"package_name":"@types/node","ecosystem":"npm","requirements":"18.0.0","direct":true,"kind":"runtime","optional":false},{"id":153205512,"package_name":"@types/promise-timeout","ecosystem":"npm","requirements":"1.3.0","direct":true,"kind":"runtime","optional":false},{"id":153205513,"package_name":"@types/react","ecosystem":"npm","requirements":"18.0.14","direct":true,"kind":"runtime","optional":false},{"id":153205514,"package_name":"@types/react-color","ecosystem":"npm","requirements":"3.0.6","direct":true,"kind":"runtime","optional":false},{"id":153205515,"package_name":"@types/react-dom","ecosystem":"npm","requirements":"18.0.5","direct":true,"kind":"runtime","optional":false},{"id":153205516,"package_name":"@types/ws","ecosystem":"npm","requirements":"8.5.3","direct":true,"kind":"runtime","optional":false},{"id":153205517,"package_name":"axios","ecosystem":"npm","requirements":"0.27.2","direct":true,"kind":"runtime","optional":false},{"id":153205518,"package_name":"bowser","ecosystem":"npm","requirements":"2.11.0","direct":true,"kind":"runtime","optional":false},{"id":153205519,"package_name":"boxed_value","ecosystem":"npm","requirements":"1.0.0","direct":true,"kind":"runtime","optional":false},{"id":153205520,"package_name":"browser-speech","ecosystem":"npm","requirements":"1.1.1","direct":true,"kind":"runtime","optional":false},{"id":153205521,"package_name":"events","ecosystem":"npm","requirements":"3.3.0","direct":true,"kind":"runtime","optional":false},{"id":153205522,"package_name":"farmbot","ecosystem":"npm","requirements":"15.3.1","direct":true,"kind":"runtime","optional":false},{"id":153205523,"package_name":"i18next","ecosystem":"npm","requirements":"21.8.11","direct":true,"kind":"runtime","optional":false},{"id":153205524,"package_name":"lodash","ecosystem":"npm","requirements":"4.17.21","direct":true,"kind":"runtime","optional":false},{"id":153205525,"package_name":"markdown-it","ecosystem":"npm","requirements":"13.0.1","direct":true,"kind":"runtime","optional":false},{"id":153205526,"package_name":"markdown-it-emoji","ecosystem":"npm","requirements":"2.0.2","direct":true,"kind":"runtime","optional":false},{"id":153205527,"package_name":"moment","ecosystem":"npm","requirements":"2.29.3","direct":true,"kind":"runtime","optional":false},{"id":153205528,"package_name":"monaco-editor","ecosystem":"npm","requirements":"0.33.0","direct":true,"kind":"runtime","optional":false},{"id":153205529,"package_name":"mqtt","ecosystem":"npm","requirements":"4.3.7","direct":true,"kind":"runtime","optional":false},{"id":153205530,"package_name":"npm","ecosystem":"npm","requirements":"8.13.1","direct":true,"kind":"runtime","optional":false},{"id":153205531,"package_name":"parcel","ecosystem":"npm","requirements":"2.6.2","direct":true,"kind":"runtime","optional":false},{"id":153205532,"package_name":"process","ecosystem":"npm","requirements":"0.11.10","direct":true,"kind":"runtime","optional":false},{"id":153205533,"package_name":"promise-timeout","ecosystem":"npm","requirements":"1.3.0","direct":true,"kind":"runtime","optional":false},{"id":153205534,"package_name":"punycode","ecosystem":"npm","requirements":"2.1.1","direct":true,"kind":"runtime","optional":false},{"id":153205535,"package_name":"querystring-es3","ecosystem":"npm","requirements":"0.2.1","direct":true,"kind":"runtime","optional":false},{"id":153205536,"package_name":"react","ecosystem":"npm","requirements":"16.13.1","direct":true,"kind":"runtime","optional":false},{"id":153205537,"package_name":"react-color","ecosystem":"npm","requirements":"2.19.3","direct":true,"kind":"runtime","optional":false},{"id":153205538,"package_name":"react-dom","ecosystem":"npm","requirements":"16.13.1","direct":true,"kind":"runtime","optional":false},{"id":153205539,"package_name":"react-redux","ecosystem":"npm","requirements":"8.0.2","direct":true,"kind":"runtime","optional":false},{"id":153205540,"package_name":"redux","ecosystem":"npm","requirements":"4.2.0","direct":true,"kind":"runtime","optional":false},{"id":153205541,"package_name":"redux-immutable-state-invariant","ecosystem":"npm","requirements":"2.1.0","direct":true,"kind":"runtime","optional":false},{"id":153205542,"package_name":"redux-thunk","ecosystem":"npm","requirements":"2.4.1","direct":true,"kind":"runtime","optional":false},{"id":153205543,"package_name":"takeme","ecosystem":"npm","requirements":"0.12.0","direct":true,"kind":"runtime","optional":false},{"id":153205544,"package_name":"typescript","ecosystem":"npm","requirements":"4.7.4","direct":true,"kind":"runtime","optional":false},{"id":153205545,"package_name":"url","ecosystem":"npm","requirements":"0.11.0","direct":true,"kind":"runtime","optional":false},{"id":153205546,"package_name":"xterm","ecosystem":"npm","requirements":"4.18.0","direct":true,"kind":"runtime","optional":false},{"id":153205547,"package_name":"@types/enzyme","ecosystem":"npm","requirements":"3.10.12","direct":true,"kind":"development","optional":false},{"id":153205548,"package_name":"@types/jest","ecosystem":"npm","requirements":"28.1.3","direct":true,"kind":"development","optional":false},{"id":153205549,"package_name":"@types/moxios","ecosystem":"npm","requirements":"0.4.15","direct":true,"kind":"development","optional":false},{"id":153205550,"package_name":"@typescript-eslint/eslint-plugin","ecosystem":"npm","requirements":"5.30.0","direct":true,"kind":"development","optional":false},{"id":153205551,"package_name":"@typescript-eslint/parser","ecosystem":"npm","requirements":"5.30.0","direct":true,"kind":"development","optional":false},{"id":153205552,"package_name":"cheerio","ecosystem":"npm","requirements":"1.0.0-rc.10","direct":true,"kind":"development","optional":false},{"id":153205553,"package_name":"coveralls","ecosystem":"npm","requirements":"3.1.1","direct":true,"kind":"development","optional":false},{"id":153205554,"package_name":"enzyme","ecosystem":"npm","requirements":"3.11.0","direct":true,"kind":"development","optional":false},{"id":153205555,"package_name":"enzyme-adapter-react-16","ecosystem":"npm","requirements":"1.15.6","direct":true,"kind":"development","optional":false},{"id":153205556,"package_name":"eslint","ecosystem":"npm","requirements":"8.18.0","direct":true,"kind":"development","optional":false},{"id":153205557,"package_name":"eslint-plugin-eslint-comments","ecosystem":"npm","requirements":"3.2.0","direct":true,"kind":"development","optional":false},{"id":153205558,"package_name":"eslint-plugin-import","ecosystem":"npm","requirements":"2.26.0","direct":true,"kind":"development","optional":false},{"id":153205559,"package_name":"eslint-plugin-jest","ecosystem":"npm","requirements":"26.5.3","direct":true,"kind":"development","optional":false},{"id":153205560,"package_name":"eslint-plugin-no-null","ecosystem":"npm","requirements":"1.0.2","direct":true,"kind":"development","optional":false},{"id":153205561,"package_name":"eslint-plugin-promise","ecosystem":"npm","requirements":"6.0.0","direct":true,"kind":"development","optional":false},{"id":153205562,"package_name":"eslint-plugin-react","ecosystem":"npm","requirements":"7.30.1","direct":true,"kind":"development","optional":false},{"id":153205563,"package_name":"eslint-plugin-react-hooks","ecosystem":"npm","requirements":"4.6.0","direct":true,"kind":"development","optional":false},{"id":153205564,"package_name":"jest","ecosystem":"npm","requirements":"28.1.2","direct":true,"kind":"development","optional":false},{"id":153205565,"package_name":"jest-cli","ecosystem":"npm","requirements":"28.1.2","direct":true,"kind":"development","optional":false},{"id":153205566,"package_name":"jest-environment-jsdom","ecosystem":"npm","requirements":"28.1.2","direct":true,"kind":"development","optional":false},{"id":153205567,"package_name":"jest-junit","ecosystem":"npm","requirements":"14.0.0","direct":true,"kind":"development","optional":false},{"id":153205568,"package_name":"jest-skipped-reporter","ecosystem":"npm","requirements":"0.0.5","direct":true,"kind":"development","optional":false},{"id":153205569,"package_name":"jshint","ecosystem":"npm","requirements":"2.13.4","direct":true,"kind":"development","optional":false},{"id":153205570,"package_name":"madge","ecosystem":"npm","requirements":"5.0.1","direct":true,"kind":"development","optional":false},{"id":153205571,"package_name":"moxios","ecosystem":"npm","requirements":"0.4.0","direct":true,"kind":"development","optional":false},{"id":153205572,"package_name":"parse5","ecosystem":"npm","requirements":"6.0.1","direct":true,"kind":"development","optional":false},{"id":153205573,"package_name":"raf","ecosystem":"npm","requirements":"3.4.1","direct":true,"kind":"development","optional":false},{"id":153205574,"package_name":"react-addons-test-utils","ecosystem":"npm","requirements":"15.6.2","direct":true,"kind":"development","optional":false},{"id":153205575,"package_name":"react-test-renderer","ecosystem":"npm","requirements":"16.13.1","direct":true,"kind":"development","optional":false},{"id":153205576,"package_name":"sass","ecosystem":"npm","requirements":"1.53.0","direct":true,"kind":"development","optional":false},{"id":153205577,"package_name":"sass-lint","ecosystem":"npm","requirements":"1.13.1","direct":true,"kind":"development","optional":false},{"id":153205578,"package_name":"ts-jest","ecosystem":"npm","requirements":"28.0.5","direct":true,"kind":"development","optional":false},{"id":153205579,"package_name":"tslint","ecosystem":"npm","requirements":"6.1.3","direct":true,"kind":"development","optional":false},{"id":153205580,"package_name":"which","ecosystem":"npm","requirements":"2.0.2","direct":true,"kind":"development","optional":false}]},{"ecosystem":"rubygems","filepath":"Gemfile","sha":null,"kind":"manifest","created_at":"2022-07-12T05:18:33.845Z","updated_at":"2022-07-12T05:18:33.845Z","repository_link":"https://github.com/FarmBot/Farmbot-Web-App/blob/staging/Gemfile","dependencies":[{"id":153205676,"package_name":"rails","ecosystem":"rubygems","requirements":"~\u003e 6","direct":true,"kind":"runtime","optional":false},{"id":153205677,"package_name":"active_model_serializers","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205678,"package_name":"bunny","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205679,"package_name":"delayed_job_active_record","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205680,"package_name":"delayed_job","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205681,"package_name":"devise","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205682,"package_name":"discard","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205683,"package_name":"google-cloud-storage","ecosystem":"rubygems","requirements":"~\u003e 1.11","direct":true,"kind":"runtime","optional":false},{"id":153205684,"package_name":"jwt","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205685,"package_name":"kaminari","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205686,"package_name":"mutations","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205687,"package_name":"pg","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205688,"package_name":"rabbitmq_http_api_client","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205689,"package_name":"rack-attack","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205690,"package_name":"rack-cors","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205691,"package_name":"rails_12factor","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205692,"package_name":"redis","ecosystem":"rubygems","requirements":"~\u003e 4.0","direct":true,"kind":"runtime","optional":false},{"id":153205693,"package_name":"request_store","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205694,"package_name":"rollbar","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205695,"package_name":"scenic","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205696,"package_name":"secure_headers","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205697,"package_name":"tzinfo","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205698,"package_name":"valid_url","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205699,"package_name":"thwait","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205700,"package_name":"lograge","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":153205701,"package_name":"codecov","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":153205702,"package_name":"climate_control","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":153205703,"package_name":"database_cleaner","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":153205704,"package_name":"factory_bot_rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":153205705,"package_name":"faker","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":153205706,"package_name":"hashdiff","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":153205707,"package_name":"pry-rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":153205708,"package_name":"pry","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":153205709,"package_name":"rspec-rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":153205710,"package_name":"rspec","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":153205711,"package_name":"rspec_junit_formatter","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":153205712,"package_name":"simplecov","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":153205713,"package_name":"smarf_doc","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":153205714,"package_name":"passenger","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"rubygems","filepath":"Gemfile.lock","sha":null,"kind":"lockfile","created_at":"2022-07-12T05:18:34.059Z","updated_at":"2022-07-12T05:18:34.059Z","repository_link":"https://github.com/FarmBot/Farmbot-Web-App/blob/staging/Gemfile.lock","dependencies":[{"id":153212028,"package_name":"smarf_doc","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":153212029,"package_name":"actioncable","ecosystem":"rubygems","requirements":"6.1.6","direct":false,"kind":"runtime","optional":false},{"id":153212030,"package_name":"actionmailbox","ecosystem":"rubygems","requirements":"6.1.6","direct":false,"kind":"runtime","optional":false},{"id":153212031,"package_name":"actionmailer","ecosystem":"rubygems","requirements":"6.1.6","direct":false,"kind":"runtime","optional":false},{"id":153212032,"package_name":"actionpack","ecosystem":"rubygems","requirements":"6.1.6","direct":false,"kind":"runtime","optional":false},{"id":153212033,"package_name":"actiontext","ecosystem":"rubygems","requirements":"6.1.6","direct":false,"kind":"runtime","optional":false},{"id":153212034,"package_name":"actionview","ecosystem":"rubygems","requirements":"6.1.6","direct":false,"kind":"runtime","optional":false},{"id":153212035,"package_name":"active_model_serializers","ecosystem":"rubygems","requirements":"0.10.13","direct":false,"kind":"runtime","optional":false},{"id":153212036,"package_name":"activejob","ecosystem":"rubygems","requirements":"6.1.6","direct":false,"kind":"runtime","optional":false},{"id":153212037,"package_name":"activemodel","ecosystem":"rubygems","requirements":"6.1.6","direct":false,"kind":"runtime","optional":false},{"id":153212038,"package_name":"activerecord","ecosystem":"rubygems","requirements":"6.1.6","direct":false,"kind":"runtime","optional":false},{"id":153212039,"package_name":"activestorage","ecosystem":"rubygems","requirements":"6.1.6","direct":false,"kind":"runtime","optional":false},{"id":153212040,"package_name":"activesupport","ecosystem":"rubygems","requirements":"6.1.6","direct":false,"kind":"runtime","optional":false},{"id":153212041,"package_name":"addressable","ecosystem":"rubygems","requirements":"2.8.0","direct":false,"kind":"runtime","optional":false},{"id":153212042,"package_name":"amq-protocol","ecosystem":"rubygems","requirements":"2.3.2","direct":false,"kind":"runtime","optional":false},{"id":153212043,"package_name":"bcrypt","ecosystem":"rubygems","requirements":"3.1.18","direct":false,"kind":"runtime","optional":false},{"id":153212044,"package_name":"builder","ecosystem":"rubygems","requirements":"3.2.4","direct":false,"kind":"runtime","optional":false},{"id":153212045,"package_name":"bunny","ecosystem":"rubygems","requirements":"2.19.0","direct":false,"kind":"runtime","optional":false},{"id":153212046,"package_name":"case_transform","ecosystem":"rubygems","requirements":"0.2","direct":false,"kind":"runtime","optional":false},{"id":153212047,"package_name":"climate_control","ecosystem":"rubygems","requirements":"1.1.1","direct":false,"kind":"runtime","optional":false},{"id":153212048,"package_name":"codecov","ecosystem":"rubygems","requirements":"0.6.0","direct":false,"kind":"runtime","optional":false},{"id":153212049,"package_name":"coderay","ecosystem":"rubygems","requirements":"1.1.3","direct":false,"kind":"runtime","optional":false},{"id":153212050,"package_name":"concurrent-ruby","ecosystem":"rubygems","requirements":"1.1.10","direct":false,"kind":"runtime","optional":false},{"id":153212051,"package_name":"crass","ecosystem":"rubygems","requirements":"1.0.6","direct":false,"kind":"runtime","optional":false},{"id":153212052,"package_name":"database_cleaner","ecosystem":"rubygems","requirements":"2.0.1","direct":false,"kind":"runtime","optional":false},{"id":153212053,"package_name":"database_cleaner-active_record","ecosystem":"rubygems","requirements":"2.0.1","direct":false,"kind":"runtime","optional":false},{"id":153212054,"package_name":"database_cleaner-core","ecosystem":"rubygems","requirements":"2.0.1","direct":false,"kind":"runtime","optional":false},{"id":153212055,"package_name":"declarative","ecosystem":"rubygems","requirements":"0.0.20","direct":false,"kind":"runtime","optional":false},{"id":153212056,"package_name":"delayed_job","ecosystem":"rubygems","requirements":"4.1.10","direct":false,"kind":"runtime","optional":false},{"id":153212057,"package_name":"delayed_job_active_record","ecosystem":"rubygems","requirements":"4.1.7","direct":false,"kind":"runtime","optional":false},{"id":153212058,"package_name":"devise","ecosystem":"rubygems","requirements":"4.8.1","direct":false,"kind":"runtime","optional":false},{"id":153212059,"package_name":"diff-lcs","ecosystem":"rubygems","requirements":"1.5.0","direct":false,"kind":"runtime","optional":false},{"id":153212060,"package_name":"digest-crc","ecosystem":"rubygems","requirements":"0.6.4","direct":false,"kind":"runtime","optional":false},{"id":153212061,"package_name":"discard","ecosystem":"rubygems","requirements":"1.2.1","direct":false,"kind":"runtime","optional":false},{"id":153212062,"package_name":"docile","ecosystem":"rubygems","requirements":"1.4.0","direct":false,"kind":"runtime","optional":false},{"id":153212063,"package_name":"e2mmap","ecosystem":"rubygems","requirements":"0.1.0","direct":false,"kind":"runtime","optional":false},{"id":153212064,"package_name":"erubi","ecosystem":"rubygems","requirements":"1.10.0","direct":false,"kind":"runtime","optional":false},{"id":153212065,"package_name":"factory_bot","ecosystem":"rubygems","requirements":"6.2.1","direct":false,"kind":"runtime","optional":false},{"id":153212066,"package_name":"factory_bot_rails","ecosystem":"rubygems","requirements":"6.2.0","direct":false,"kind":"runtime","optional":false},{"id":153212067,"package_name":"faker","ecosystem":"rubygems","requirements":"2.21.0","direct":false,"kind":"runtime","optional":false},{"id":153212068,"package_name":"faraday","ecosystem":"rubygems","requirements":"1.10.0","direct":false,"kind":"runtime","optional":false},{"id":153212069,"package_name":"faraday-em_http","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":153212070,"package_name":"faraday-em_synchrony","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":153212071,"package_name":"faraday-excon","ecosystem":"rubygems","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":153212072,"package_name":"faraday-httpclient","ecosystem":"rubygems","requirements":"1.0.1","direct":false,"kind":"runtime","optional":false},{"id":153212073,"package_name":"faraday-multipart","ecosystem":"rubygems","requirements":"1.0.4","direct":false,"kind":"runtime","optional":false},{"id":153212074,"package_name":"faraday-net_http","ecosystem":"rubygems","requirements":"1.0.1","direct":false,"kind":"runtime","optional":false},{"id":153212075,"package_name":"faraday-net_http_persistent","ecosystem":"rubygems","requirements":"1.2.0","direct":false,"kind":"runtime","optional":false},{"id":153212076,"package_name":"faraday-patron","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":153212077,"package_name":"faraday-rack","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":153212078,"package_name":"faraday-retry","ecosystem":"rubygems","requirements":"1.0.3","direct":false,"kind":"runtime","optional":false},{"id":153212079,"package_name":"faraday_middleware","ecosystem":"rubygems","requirements":"1.2.0","direct":false,"kind":"runtime","optional":false},{"id":153212080,"package_name":"globalid","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":153212081,"package_name":"google-apis-core","ecosystem":"rubygems","requirements":"0.6.0","direct":false,"kind":"runtime","optional":false},{"id":153212082,"package_name":"google-apis-iamcredentials_v1","ecosystem":"rubygems","requirements":"0.12.0","direct":false,"kind":"runtime","optional":false},{"id":153212083,"package_name":"google-apis-storage_v1","ecosystem":"rubygems","requirements":"0.16.0","direct":false,"kind":"runtime","optional":false},{"id":153212084,"package_name":"google-cloud-core","ecosystem":"rubygems","requirements":"1.6.0","direct":false,"kind":"runtime","optional":false},{"id":153212085,"package_name":"google-cloud-env","ecosystem":"rubygems","requirements":"1.6.0","direct":false,"kind":"runtime","optional":false},{"id":153212086,"package_name":"google-cloud-errors","ecosystem":"rubygems","requirements":"1.2.0","direct":false,"kind":"runtime","optional":false},{"id":153212087,"package_name":"google-cloud-storage","ecosystem":"rubygems","requirements":"1.36.2","direct":false,"kind":"runtime","optional":false},{"id":153212088,"package_name":"googleauth","ecosystem":"rubygems","requirements":"1.2.0","direct":false,"kind":"runtime","optional":false},{"id":153212089,"package_name":"hashdiff","ecosystem":"rubygems","requirements":"1.0.1","direct":false,"kind":"runtime","optional":false},{"id":153212090,"package_name":"hashie","ecosystem":"rubygems","requirements":"4.1.0","direct":false,"kind":"runtime","optional":false},{"id":153212091,"package_name":"httpclient","ecosystem":"rubygems","requirements":"2.8.3","direct":false,"kind":"runtime","optional":false},{"id":153212092,"package_name":"i18n","ecosystem":"rubygems","requirements":"1.10.0","direct":false,"kind":"runtime","optional":false},{"id":153212093,"package_name":"jsonapi-renderer","ecosystem":"rubygems","requirements":"0.2.2","direct":false,"kind":"runtime","optional":false},{"id":153212094,"package_name":"jwt","ecosystem":"rubygems","requirements":"2.4.1","direct":false,"kind":"runtime","optional":false},{"id":153212095,"package_name":"kaminari","ecosystem":"rubygems","requirements":"1.2.2","direct":false,"kind":"runtime","optional":false},{"id":153212096,"package_name":"kaminari-actionview","ecosystem":"rubygems","requirements":"1.2.2","direct":false,"kind":"runtime","optional":false},{"id":153212097,"package_name":"kaminari-activerecord","ecosystem":"rubygems","requirements":"1.2.2","direct":false,"kind":"runtime","optional":false},{"id":153212098,"package_name":"kaminari-core","ecosystem":"rubygems","requirements":"1.2.2","direct":false,"kind":"runtime","optional":false},{"id":153212099,"package_name":"lograge","ecosystem":"rubygems","requirements":"0.12.0","direct":false,"kind":"runtime","optional":false},{"id":153212100,"package_name":"loofah","ecosystem":"rubygems","requirements":"2.18.0","direct":false,"kind":"runtime","optional":false},{"id":153212101,"package_name":"mail","ecosystem":"rubygems","requirements":"2.7.1","direct":false,"kind":"runtime","optional":false},{"id":153212102,"package_name":"marcel","ecosystem":"rubygems","requirements":"1.0.2","direct":false,"kind":"runtime","optional":false},{"id":153212103,"package_name":"memoist","ecosystem":"rubygems","requirements":"0.16.2","direct":false,"kind":"runtime","optional":false},{"id":153212104,"package_name":"method_source","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":153212105,"package_name":"mini_mime","ecosystem":"rubygems","requirements":"1.1.2","direct":false,"kind":"runtime","optional":false},{"id":153212106,"package_name":"minitest","ecosystem":"rubygems","requirements":"5.16.1","direct":false,"kind":"runtime","optional":false},{"id":153212107,"package_name":"multi_json","ecosystem":"rubygems","requirements":"1.15.0","direct":false,"kind":"runtime","optional":false},{"id":153212108,"package_name":"multipart-post","ecosystem":"rubygems","requirements":"2.2.3","direct":false,"kind":"runtime","optional":false},{"id":153212109,"package_name":"mutations","ecosystem":"rubygems","requirements":"0.9.1","direct":false,"kind":"runtime","optional":false},{"id":153212110,"package_name":"nio4r","ecosystem":"rubygems","requirements":"2.5.8","direct":false,"kind":"runtime","optional":false},{"id":153212111,"package_name":"nokogiri","ecosystem":"rubygems","requirements":"1.13.6","direct":false,"kind":"runtime","optional":false},{"id":153212112,"package_name":"orm_adapter","ecosystem":"rubygems","requirements":"0.5.0","direct":false,"kind":"runtime","optional":false},{"id":153212113,"package_name":"os","ecosystem":"rubygems","requirements":"1.1.4","direct":false,"kind":"runtime","optional":false},{"id":153212114,"package_name":"passenger","ecosystem":"rubygems","requirements":"6.0.14","direct":false,"kind":"runtime","optional":false},{"id":153212115,"package_name":"pg","ecosystem":"rubygems","requirements":"1.4.1","direct":false,"kind":"runtime","optional":false},{"id":153212116,"package_name":"pry","ecosystem":"rubygems","requirements":"0.14.1","direct":false,"kind":"runtime","optional":false},{"id":153212117,"package_name":"pry-rails","ecosystem":"rubygems","requirements":"0.3.9","direct":false,"kind":"runtime","optional":false},{"id":153212118,"package_name":"public_suffix","ecosystem":"rubygems","requirements":"4.0.7","direct":false,"kind":"runtime","optional":false},{"id":153212119,"package_name":"rabbitmq_http_api_client","ecosystem":"rubygems","requirements":"2.2.0","direct":false,"kind":"runtime","optional":false},{"id":153212120,"package_name":"racc","ecosystem":"rubygems","requirements":"1.6.0","direct":false,"kind":"runtime","optional":false},{"id":153212121,"package_name":"rack","ecosystem":"rubygems","requirements":"2.2.3.1","direct":false,"kind":"runtime","optional":false},{"id":153212122,"package_name":"rack-attack","ecosystem":"rubygems","requirements":"6.6.1","direct":false,"kind":"runtime","optional":false},{"id":153212123,"package_name":"rack-cors","ecosystem":"rubygems","requirements":"1.1.1","direct":false,"kind":"runtime","optional":false},{"id":153212124,"package_name":"rack-test","ecosystem":"rubygems","requirements":"2.0.2","direct":false,"kind":"runtime","optional":false},{"id":153212125,"package_name":"rails","ecosystem":"rubygems","requirements":"6.1.6","direct":false,"kind":"runtime","optional":false},{"id":153212126,"package_name":"rails-dom-testing","ecosystem":"rubygems","requirements":"2.0.3","direct":false,"kind":"runtime","optional":false},{"id":153212127,"package_name":"rails-html-sanitizer","ecosystem":"rubygems","requirements":"1.4.3","direct":false,"kind":"runtime","optional":false},{"id":153212128,"package_name":"rails_12factor","ecosystem":"rubygems","requirements":"0.0.3","direct":false,"kind":"runtime","optional":false},{"id":153212129,"package_name":"rails_serve_static_assets","ecosystem":"rubygems","requirements":"0.0.5","direct":false,"kind":"runtime","optional":false},{"id":153212130,"package_name":"rails_stdout_logging","ecosystem":"rubygems","requirements":"0.0.5","direct":false,"kind":"runtime","optional":false},{"id":153212131,"package_name":"railties","ecosystem":"rubygems","requirements":"6.1.6","direct":false,"kind":"runtime","optional":false},{"id":153212132,"package_name":"rake","ecosystem":"rubygems","requirements":"13.0.6","direct":false,"kind":"runtime","optional":false},{"id":153212133,"package_name":"rbtree","ecosystem":"rubygems","requirements":"0.4.5","direct":false,"kind":"runtime","optional":false},{"id":153212134,"package_name":"redis","ecosystem":"rubygems","requirements":"4.7.0","direct":false,"kind":"runtime","optional":false},{"id":153212135,"package_name":"representable","ecosystem":"rubygems","requirements":"3.2.0","direct":false,"kind":"runtime","optional":false},{"id":153212136,"package_name":"request_store","ecosystem":"rubygems","requirements":"1.5.1","direct":false,"kind":"runtime","optional":false},{"id":153212137,"package_name":"responders","ecosystem":"rubygems","requirements":"3.0.1","direct":false,"kind":"runtime","optional":false},{"id":153212138,"package_name":"retriable","ecosystem":"rubygems","requirements":"3.1.2","direct":false,"kind":"runtime","optional":false},{"id":153212139,"package_name":"rexml","ecosystem":"rubygems","requirements":"3.2.5","direct":false,"kind":"runtime","optional":false},{"id":153212140,"package_name":"rollbar","ecosystem":"rubygems","requirements":"3.3.1","direct":false,"kind":"runtime","optional":false},{"id":153212141,"package_name":"rspec","ecosystem":"rubygems","requirements":"3.11.0","direct":false,"kind":"runtime","optional":false},{"id":153212142,"package_name":"rspec-core","ecosystem":"rubygems","requirements":"3.11.0","direct":false,"kind":"runtime","optional":false},{"id":153212143,"package_name":"rspec-expectations","ecosystem":"rubygems","requirements":"3.11.0","direct":false,"kind":"runtime","optional":false},{"id":153212144,"package_name":"rspec-mocks","ecosystem":"rubygems","requirements":"3.11.1","direct":false,"kind":"runtime","optional":false},{"id":153212145,"package_name":"rspec-rails","ecosystem":"rubygems","requirements":"5.1.2","direct":false,"kind":"runtime","optional":false},{"id":153212146,"package_name":"rspec-support","ecosystem":"rubygems","requirements":"3.11.0","direct":false,"kind":"runtime","optional":false},{"id":153212147,"package_name":"rspec_junit_formatter","ecosystem":"rubygems","requirements":"0.5.1","direct":false,"kind":"runtime","optional":false},{"id":153212148,"package_name":"ruby2_keywords","ecosystem":"rubygems","requirements":"0.0.5","direct":false,"kind":"runtime","optional":false},{"id":153212149,"package_name":"scenic","ecosystem":"rubygems","requirements":"1.6.0","direct":false,"kind":"runtime","optional":false},{"id":153212150,"package_name":"secure_headers","ecosystem":"rubygems","requirements":"6.3.4","direct":false,"kind":"runtime","optional":false},{"id":153212151,"package_name":"set","ecosystem":"rubygems","requirements":"1.0.2","direct":false,"kind":"runtime","optional":false},{"id":153212152,"package_name":"signet","ecosystem":"rubygems","requirements":"0.17.0","direct":false,"kind":"runtime","optional":false},{"id":153212153,"package_name":"simplecov","ecosystem":"rubygems","requirements":"0.21.2","direct":false,"kind":"runtime","optional":false},{"id":153212154,"package_name":"simplecov-html","ecosystem":"rubygems","requirements":"0.12.3","direct":false,"kind":"runtime","optional":false},{"id":153212155,"package_name":"simplecov_json_formatter","ecosystem":"rubygems","requirements":"0.1.4","direct":false,"kind":"runtime","optional":false},{"id":153212156,"package_name":"sorted_set","ecosystem":"rubygems","requirements":"1.0.3","direct":false,"kind":"runtime","optional":false},{"id":153212157,"package_name":"sprockets","ecosystem":"rubygems","requirements":"4.1.1","direct":false,"kind":"runtime","optional":false},{"id":153212158,"package_name":"sprockets-rails","ecosystem":"rubygems","requirements":"3.4.2","direct":false,"kind":"runtime","optional":false},{"id":153212159,"package_name":"thor","ecosystem":"rubygems","requirements":"1.2.1","direct":false,"kind":"runtime","optional":false},{"id":153212160,"package_name":"thwait","ecosystem":"rubygems","requirements":"0.2.0","direct":false,"kind":"runtime","optional":false},{"id":153212161,"package_name":"trailblazer-option","ecosystem":"rubygems","requirements":"0.1.2","direct":false,"kind":"runtime","optional":false},{"id":153212162,"package_name":"tzinfo","ecosystem":"rubygems","requirements":"2.0.4","direct":false,"kind":"runtime","optional":false},{"id":153212163,"package_name":"uber","ecosystem":"rubygems","requirements":"0.1.0","direct":false,"kind":"runtime","optional":false},{"id":153212164,"package_name":"valid_url","ecosystem":"rubygems","requirements":"0.0.4","direct":false,"kind":"runtime","optional":false},{"id":153212165,"package_name":"warden","ecosystem":"rubygems","requirements":"1.2.9","direct":false,"kind":"runtime","optional":false},{"id":153212166,"package_name":"webrick","ecosystem":"rubygems","requirements":"1.7.0","direct":false,"kind":"runtime","optional":false},{"id":153212167,"package_name":"websocket-driver","ecosystem":"rubygems","requirements":"0.7.5","direct":false,"kind":"runtime","optional":false},{"id":153212168,"package_name":"websocket-extensions","ecosystem":"rubygems","requirements":"0.1.5","direct":false,"kind":"runtime","optional":false},{"id":153212169,"package_name":"zeitwerk","ecosystem":"rubygems","requirements":"2.6.0","direct":false,"kind":"runtime","optional":false}]},{"ecosystem":"docker","filepath":"docker-compose.yml","sha":null,"kind":"manifest","created_at":"2023-01-14T00:30:24.963Z","updated_at":"2023-01-14T00:30:24.963Z","repository_link":"https://github.com/FarmBot/Farmbot-Web-App/blob/staging/docker-compose.yml","dependencies":[{"id":6891902879,"package_name":"redis","ecosystem":"docker","requirements":"5","direct":true,"kind":"runtime","optional":false},{"id":6891902880,"package_name":"postgres","ecosystem":"docker","requirements":"13","direct":true,"kind":"runtime","optional":false},{"id":6891902881,"package_name":"farmbot_web","ecosystem":"docker","requirements":"latest","direct":true,"kind":"runtime","optional":false}]}],"score":10.658905058822198,"created_at":"2023-09-11T11:54:36.803Z","updated_at":"2026-04-12T04:30:44.872Z","avatar_url":"https://github.com/FarmBot.png","language":"TypeScript","category":"Consumption","sub_category":"Agriculture and Nutrition","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# FarmBot Web App\n\n[![codebeat badge](https://codebeat.co/badges/7f81859b-67fe-4bdb-b56f-050bfed35e9c)](https://codebeat.co/projects/github-com-farmbot-farmbot-web-app-staging)\n[![codecov](https://codecov.io/gh/FarmBot/Farmbot-Web-App/branch/staging/graph/badge.svg)](https://codecov.io/gh/FarmBot/Farmbot-Web-App)\n[![Coverage Status](https://coveralls.io/repos/github/FarmBot/Farmbot-Web-App/badge.svg)](https://coveralls.io/github/FarmBot/Farmbot-Web-App)\n[![Maintainability](https://api.codeclimate.com/v1/badges/74091163d8a02bb8988f/maintainability)](https://codeclimate.com/github/FarmBot/Farmbot-Web-App/maintainability)\n\nThis codebase contains FarmBot's web based user interface, a RESTful JSON API, and a Dockerized MQTT server. The API stores data such as user account information, farm designs, sequences, authorization tokens, and a variety of other resources. The MQTT server facilitates realtime messaging from the browser to the device.\n\n## I own a FarmBot, do I need this?\n\n**No. If you are an owner of a FarmBot kit, you do not need to download or self-host this software.** [FarmBot Inc](https://farm.bot) provides a free-to-use instance of the web app at [my.farm.bot](https://my.farm.bot/) which we recommend to all FarmBot owners. Get started with [these instructions](https://software.farm.bot/docs/getting-started).\n\n# Self hosting\n\nHosting your own server requires an understanding of how Ruby on Rails applications (and databases) operate. Self-hosting the web app will not provide you with a more stable user experience and may result in accidental security issues or data loss. There are only a handful of use cases where running a third party server may be necessary:\n\n * Development of new features, bug fixes, and pull requests.\n * Independent security research and auditing.\n\n:warning: If you are not a Ruby on Rails developer or you have never written a Ruby on Rails application, please use [my.farm.bot](https://my.farm.bot/) instead of trying to self host. *Running a server is a non-trivial task that may require hundreds of hours of setup and maintenance time.* Data loss and security issues are possible in some circumstances. Self hosting requires an intermediate background (3 to 5 years experience) in Ruby, SQL and Linux system administration.\n\n:no_entry: **Technical support for self hosting is beyond the scope of the basic technical support that FarmBot Inc provides with each FarmBot kit. If you or your organization pursue self hosting, you will need to operate your server independently of FarmBot Inc technical support. We do not have the resources available to help novice developers learn to setup servers, environments, configurations, or perform basic Linux command line instructions.**\n\n## Local setup\n\nWe recommend all self hosted installations be installed on a fresh Ubuntu server using the instructions provided in [local_setup_instructions.sh](local_setup_instructions.sh). These instructions are regularly checked and updated to ensure they work. **At this time we cannot provide assistance for running the web app in different environments.**\n\nIf you raise an issue indicating that you haven't followed the setup instructions, looked through past issues, or done a cursory internet search for basic help, expect the issue to be closed and we'll point you to the setup instructions. *Again, if you do not have at least intermediate Linux and Ruby experience, please use [my.farm.bot](https://my.farm.bot).* Running a self-hosted server is not easy!\n\n## Configuration settings (important)\n\n**Your server won't run without setting ENV variables first**. Set the ENV variables directly from your shell / server management tool or by writing a `.env` file in the server's base directory. See [example.env](example.env) for a list of all the variables that must be set.\n\nEncryption keys will be auto-generated if not present. They can be reset using `rake keys:generate`. If `ENV['RSA_KEY']` is set, it will be used in place of the `*.pem` files. This is useful for environments like Heroku and Docker, where file system access is not allowed.\n\n## Updates\n\nWe update `main` roughly every 2 to 4 weeks. If you self host the application you will need to manually update the software to get the latest updates. Technical support for self hosting is beyond the scope of the basic technical support that we provide with each FarmBot kit.\n\n## Example API requests\n\nSee our documentation for a list of [example API requests and responses](https://developer.farm.bot/docs/api-docs). If you wish to write an add-on application that uses the FarmBot API, please let us know in an issue. We are happy to answer any specific questions you may have.\n\n# Contributing\n\nThere are many ways in which you can contribute to the FarmBot web app:\n\n:pencil: Browse the [open issues](https://github.com/FarmBot/Farmbot-Web-App/issues) and make thoughtful suggestions or just let us know if something is particularly important to you.\n\n:books: Check out our [developer documentation](https://developer.farm.bot/) for writing add-ons and plugins for FarmBot.\n\n:mag: Search the repository for [TODOs](https://github.com/FarmBot/Farmbot-Web-App/search?utf8=%E2%9C%93\u0026q=todo). Sometimes these are simple tasks suitable for new contributors.\n\n:globe_with_meridians: Help [translate the web app](#translating-the-web-app) into your language! There are FarmBot owners in over 90 countries who speak a wide range of primary languages.\n\n:lock: [Responsibly disclose a security vulnerability](http://disclosure.farm.bot/). We take security seriously and value the input of independent researchers.\n\n:bulb: [Open an issue](https://github.com/FarmBot/Farmbot-Web-App/issues/new) to report a non-security related problem or propose a new feature or improvement idea.\n\n## Translating the web app\n\nThanks for your interest in internationalizing the FarmBot web app! To add translations:\n\n1. Fork this repo\n0. Navigate to `/public/app-resources/languages` and run the command `bun _helper.js yy` where `yy` is your language's [language code](http://www.science.co.il/Language/Locale-codes.php). Eg: `ru` for Russian.\n0. Edit the translations in the file created in the previous step: `\"phrase\": \"translated phrase\"`.\n0. When you have updated or added new translations, commit/push your changes and submit a pull request.\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["elixir","nerves","farming","gardening","plants"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/1064","html_url":"https://ost.ecosyste.ms/projects/1064"}