{"id":13463511,"url":"https://github.com/camping/camping","last_synced_at":"2025-12-16T16:03:15.184Z","repository":{"id":642255,"uuid":"284190","full_name":"camping/camping","owner":"camping","description":"the 5k pocket full-of-gags web microframework","archived":false,"fork":false,"pushed_at":"2025-03-10T23:04:40.000Z","size":1250,"stargazers_count":948,"open_issues_count":44,"forks_count":103,"subscribers_count":31,"default_branch":"main","last_synced_at":"2025-03-25T06:34:03.685Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","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/camping.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2009-08-21T13:59:40.000Z","updated_at":"2025-03-25T01:07:30.000Z","dependencies_parsed_at":"2023-07-12T02:02:21.688Z","dependency_job_id":"382b4a43-9c61-44bc-ba1e-f316e9979557","html_url":"https://github.com/camping/camping","commit_stats":{"total_commits":798,"total_committers":45,"mean_commits":"17.733333333333334","dds":0.713032581453634,"last_synced_commit":"e5d7b2e77e069c80fc6316861ebaf143e97f9f1d"},"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/camping/camping","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camping%2Fcamping","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camping%2Fcamping/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camping%2Fcamping/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camping%2Fcamping/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/camping","download_url":"https://codeload.github.com/camping/camping/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camping%2Fcamping/sbom","scorecard":{"id":263858,"data":{"date":"2025-08-11","repo":{"name":"github.com/camping/camping","commit":"f2479aa5dd6d157d06007a1e5bca2be7f449e832"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.9,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"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":"Maintained","score":0,"reason":"0 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 2/26 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":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/camping.yml:1","Warn: no topLevel permission defined: .github/workflows/integration.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/camping.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/camping/camping/camping.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/camping.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/camping/camping/camping.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/integration.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/camping/camping/integration.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/integration.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/camping/camping/integration.yml/main?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: COPYING:0","Info: FSF or OSI recognized license: MIT License: COPYING:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":2,"reason":"8 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-47m2-26rw-j2jw","Warn: Project is vulnerable to: GHSA-7g2v-jj9q-g3rg","Warn: Project is vulnerable to: GHSA-7wqh-767x-r66v","Warn: Project is vulnerable to: GHSA-8cgq-6mh2-7j6v","Warn: Project is vulnerable to: GHSA-gjh7-p2fx-99vx","Warn: Project is vulnerable to: GHSA-9j94-67jr-4cqj","Warn: Project is vulnerable to: GHSA-6f62-3596-g6w7","Warn: Project is vulnerable to: GHSA-r995-q44h-hr64"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":-1,"reason":"internal error: internal error: Client.Checks.ListCheckRunsForRef: error during graphqlHandler.setupCheckRuns: non-200 OK status code: 502 Bad Gateway body: \"\u003chtml\u003e\\r\\n\u003chead\u003e\u003ctitle\u003e502 Bad Gateway\u003c/title\u003e\u003c/head\u003e\\r\\n\u003cbody\u003e\\r\\n\u003ccenter\u003e\u003ch1\u003e502 Bad Gateway\u003c/h1\u003e\u003c/center\u003e\\r\\n\u003chr\u003e\u003ccenter\u003enginx\u003c/center\u003e\\r\\n\u003c/body\u003e\\r\\n\u003c/html\u003e\\r\\n\"","details":null,"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T11:28:01.810Z","repository_id":642255,"created_at":"2025-08-17T11:28:01.810Z","updated_at":"2025-08-17T11:28:01.810Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27767534,"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-12-16T02:00:10.477Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T13:00:54.602Z","updated_at":"2025-12-16T16:03:15.156Z","avatar_url":"https://github.com/camping.png","language":"Ruby","readme":"![Build Status](https://github.com/camping/camping/actions/workflows/camping.yml/badge.svg) ![Build Status](https://github.com/camping/camping/actions/workflows/integration.yml/badge.svg)\n\n# ⛺️ Camping, a Microframework\n\nCamping is a micro web framework which stays as small as possible.\nYou can probably view the complete source code on a single page. But, you\nknow, it's so small that, if you think about it, what can it really do? Apparently\nit can do a lot. It's pretty swell.\n\nThe idea here is to store a complete fledgling web application in a single\nfile like many small CGIs. But to organize it as a Model-View-Controller\napplication. And with time, you can move your Models, Views, and Controllers into\nother files as your app grows.\n\nCamping supports multiple *apps*, capsuled code that runs together. Each app can\nhave independent models, routes, and controllers.\n\nPack your gear when you go Camping! With a simple plugin system, Camping is easily\nextensible. Add all sorts of useful and silly things.\n\n## A Camping Skeleton\n\nA skeletal Camping blog could look like this:\n\n```ruby\nrequire 'camping'\n\nCamping.goes :Blog\n\nmodule Blog::Models\n  class Post \u003c Base; belongs_to :user; end\n  class Comment \u003c Base; belongs_to :user; end\n  class User \u003c Base; end\nend\n\nmodule Blog::Controllers\n  class Index\n    def get\n      @posts = Post.find :all\n      render :index\n    end\n  end\nend\n\nmodule Blog::Views\n  def layout\n    html do\n      head { title \"My Blog\" }\n      body do\n        h1 \"My Blog\"\n        self \u003c\u003c yield\n      end\n    end\n  end\n\n  def index\n    @posts.each do |post|\n      h1 post.title\n    end\n  end\nend\n```\n\n## Installation\n\nInterested yet?  Luckily it's quite easy to install Camping.  We'll be using\na tool called RubyGems, and Bundler, so if you don't have that installed\nyet, go grab it! Once that's sorted out, open up a Terminal or Command\nLine and enter:\n\n```\ngem install camping\n```\n\n~~Even better, install the Camping Omnibus, a full package of recommended libs:~~ Camping Omnibus will return for summer vacation.\n\nNow make a new directory filled with your camp essentials using the `camping new` command:\n\n```\ncamping new Donuts # You can replace Donuts with whatever but CamelCased.\n```\n\nMove to your new directory, then use bundler to install all of your camp's dependencies:\n\n```\ncd donuts; bundle install\n```\n\nYou can now run camping using the `camping` command. We recommend running camping in development mode locally. Make certain to prefix the camping command with `bundle exec` to run your app with the gems you've installed just for your camp:\n\n```\nbundle exec camping -e development\n```\n\n## Learning\n\nFirst of all, you should read [the first chapters](/book/01_introduction.md)\nof The Camping Book. It should hopefully get you started pretty quick. While\nyou're doing that, you should be aware of the _reference_ which contains\ndocumentation for all the different parts of Camping.\n\n[The wiki](https://github.com/camping/camping/wiki) is the place for all tiny,\nuseful tricks that we've collected over the years.  Don't be afraid to share\nyour own discoveries; the more, the better!\n\nWe have a Discord channel over at the Ruby Punks community, so if you feel\nlike chatting with us, you should join [#camping](https://discord.gg/JSmPBsWgFt). Once our chattin' leads to action, we open up an issue on Github and move the conversation over there.\n\n## Contributing\n\nCamping is under active development, and we'd love some help!. Our current focus is bug fixes, documentation, and tests. We have a [number of issues](https://github.com/camping/camping/issues?q=is%3Aissue+is%3Aopen+label%3A%22Great+for+new+Contributors%22) open for new contributors to get crackin!\n\nTo begin contributing, [Fork Camping](https://github.com/camping/camping/fork), Then make a new branch, (`git checkout -b my_branch_name`) with your changes. When you're ready to bring all that hard work on over, open a draft PR and ping Karl to take a look, He'll help you fix any issues and help you get it inside of old Camping.\n\nHave a suggestion? Open an issue with what you think we ought to be doing with our lives, and we'll talk about it. Don't be shy.\n\n## Running Tests\n\nTests should be run using bundler and rake: `bundle exec rake`.\n\n## Minting Releases\n\nWe use Ruby Gems to distribute versions of Camping. When you're ready to mint a release, run: `gem build -o camping.gem`, then `gem push camping.gem`.\n\n## Authors\n\nCamping was originally crafted by [why the lucky stiff](http://en.wikipedia.org/wiki/Why_the_lucky_stiff), but is now maintained by the _community_. This simply means that if we like your patch, it will be applied. Everything is managed through this Github repo, so just [open an issue](https://github.com/camping/camping/issues/new) and you can instantly take part in shaping Camping.\n","funding_links":[],"categories":["Web Apps, Services \u0026 Interaction","Ruby","Frameworks","Web Frameworks"],"sub_categories":["Web App Frameworks"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcamping%2Fcamping","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcamping%2Fcamping","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcamping%2Fcamping/lists"}