{"id":17749540,"url":"https://github.com/oresoftware/roodles","last_synced_at":"2026-05-19T19:31:27.018Z","repository":{"id":95713135,"uuid":"82993892","full_name":"ORESoftware/roodles","owner":"ORESoftware","description":"Just like Nodemon, but a little bit different.","archived":false,"fork":false,"pushed_at":"2018-05-30T05:21:17.000Z","size":33,"stargazers_count":1,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-09T09:14:36.462Z","etag":null,"topics":["asynchronous","chokidar","developer-tools","hashbang","nodejs","nodemon","rapid-development","restart","watcher"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ORESoftware.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-02-24T02:45:07.000Z","updated_at":"2018-05-30T05:21:18.000Z","dependencies_parsed_at":"2023-05-21T17:45:32.710Z","dependency_job_id":null,"html_url":"https://github.com/ORESoftware/roodles","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ORESoftware/roodles","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ORESoftware%2Froodles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ORESoftware%2Froodles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ORESoftware%2Froodles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ORESoftware%2Froodles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ORESoftware","download_url":"https://codeload.github.com/ORESoftware/roodles/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ORESoftware%2Froodles/sbom","scorecard":{"id":103762,"data":{"date":"2025-08-11","repo":{"name":"github.com/ORESoftware/roodles","commit":"130ab7af0711e805f8768709c02c84ea5bef8c6f"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.4,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"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":"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":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: npmCommand not pinned by hash: @build.sh:5","Info:   0 out of   1 npmCommand 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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-15T10:42:08.289Z","repository_id":95713135,"created_at":"2025-08-15T10:42:08.289Z","updated_at":"2025-08-15T10:42:08.289Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33229364,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-19T15:49:41.270Z","status":"ssl_error","status_checked_at":"2026-05-19T15:49:22.917Z","response_time":58,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asynchronous","chokidar","developer-tools","hashbang","nodejs","nodemon","rapid-development","restart","watcher"],"created_at":"2024-10-26T11:23:42.442Z","updated_at":"2026-05-19T19:31:26.983Z","avatar_url":"https://github.com/ORESoftware.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n# roodles (NPM project)\n\nThis project is just like Nodemon. It strives to accomplish the same thing.\nMy team was having troubles with Nodemon, and so we wrote something we \ncould tweak on our own. Maybe it works better, maybe it doesn't. We think it does.\nAll the code is in one file, so you can steal it easily :)\n\n\n## Installation\n\n=\u003e ```npm install -D roodles@latest```\n\nYou can put a ```roodles.conf.js``` file at the root of your project:\n\n```js\n//roodles.conf.js\n\nmodule.exports = Object.freeze({\n   exec: '\u003cpath-to-exec-file\u003e',  // any binary file or a file with a hashbang\n   include: ['c'],   // list of regexes or strings\n   exclude: [/a/,'b'],\n   verbosity: 2,  // an integer {1,2,3}\n   processArgs: []  // the args that get sent to your process\n});\n\n```\n\n# Recommended workflow\n\nInstall roodles as a dev dependency (as described above).\n\nThen add this bash script to your project:\n\n```bash\n#!/usr/bin/env bash\n\ncd $(dirname \"$0\")\n./node_modules/.bin/roodles $@\n```\n\nThen just run this bash script, and roodles will do its thing.\n\n\n# Usage: Here's the API\n\n_Currently the API is a command line interface (CLI) only._\n\nAfter installing locally, you can run:\n\n```terminal\n./node_modules/.bin/roodles \n```\n\n\nif you don't use the ```roodles.conf.js``` file, then you will need to\nat the very least specify which exec file to use.\n\nTo specify that, you will use the --exec option like:\n\n```terminal\n./node_modules/.bin/roodles --exec \u003cfile\u003e\n```\nremember that your --exec file must have a hashbang or be binary.\n\n## Remember\n\nTo use roodles, your --exec file must be binary or have a hashbang; with node.js, that looks like:\n\n```js\n#!/usr/bin/env node\nconsole.log('this node.js file has a hashbang at the top, telling ' +\n 'the OS which executable to use to execute the file.');\n```\n\nUsing the hashbang scheme means you can easily go beyond node.js exec scripts, and use bash, python, ruby,\nperl, or even binary files like golang executables (which don't need a hashbang), etc, etc.\n\n\n## Here are the default roodles.conf.js options:\n\n```js\n\nconst defaults = {\n  verbosity: 2,              // 1 is lowest verbosity, 3 is highest\n  signal: 'SIGKILL',         // We recommend using SIGINT or SIGTERM and gracefully shutting down your process instead*\n  processArgs: [],           // we don't know what args to pass to your process!\n  restartUponChange: true,\n  restartUponAddition: false,\n  restartUponUnlink: false,\n  processLogPath: null,         // if desired, pass a relative or absolute path to log file\n  include: projectRoot,         // default is to watch all files in your project\n  exclude: [                    //...all files except the following!\n    /node_modules/,\n    /public/,\n    /bower_components/,\n    /.git/,\n    /.idea/,\n    /package.json/,\n    /test/\n  ]\n};\n\n```\n\n\n### Here's the current --help output\n\n```\n\noptions:\n    --version                           Print tool version and exit.\n    -h, --help                          Print the help information and exit.\n    -v INT, --verbosity=INT             Verbosity level =\u003e {1, 2, or 3}; the\n                                        higher, the more verbose; default is 2.\n    --process-args=ARG                  These args are directly passed to your\n                                        running process, your should surround\n                                        with quotes like so:\n                                        --process-args=\"--foo bar --baz bam\".\n    --ruc, --restart-upon-change, --restart-upon-changes\n                                        Roodles will restart your process upon\n                                        file changes.\n    --rua, --restart-upon-addition, --restart-upon-additions\n                                        Roodles will restart your process upon\n                                        file additions.\n    --ruu, --restart-upon-unlink, --restart-upon-unlinks\n                                        Roodles will restart your process upon\n                                        file deletions/unlinking.\n    --exec=ARG                          Relative or absolute path of the file\n                                        you wish to execute (and re-execute on\n                                        changes).\n    --include=ARG                       Include these paths (array of regex\n                                        and/or strings).\n    --exclude=ARG                       Exclude these paths (array of regex\n                                        and/or strings).\n    -s ARG, --signal=ARG                The --signal option is one of\n                                        {\"SIGINT\",\"SIGTERM\",\"SIGKILL\"}.\n\n\n```\n\n\n# name: roodles ?\n\nRoodles is just something I say on occasion, more like: \"roodles!\". \nAt some point I would have used this name for a software project.\nThis was the right one. I think of roodles being similar to \"redo\"...like, \"restart\". \n\nroodles~redo.\n\n\n## Example\n\nHere is an example exec file (a server, which is standard use case), and how to *shutdown gracefully,\nusing SIGINT instead of SIGKILL. You can use SIGTERM/SIGINT, both are better than SIGKILL.\n\n```js\n#!/usr/bin/env node\n\nconst http = require('http');\n\nconst server = http.createServer(function (req, res) {\n  setTimeout(function () {\n    res.write('flowers');\n    res.end();\n  }, 100);\n});\n\nlet exitCode;\n\nserver.listen(3000, function () {\n  \n  console.log(' =\u003e Server is listening on port 3000');\n  \n  process.once('close', function(){\n      process.exit(exitCode || 0);\n  });\n\n  process.once('SIGINT', function (code) {\n    console.log('SIGINT received...');\n    server.close();\n  });\n\n});\n\n\n```\n\nnote the hashbang as well as the ```process.once('SIGINT')``` handler, which will allow us to\ngracefully shut down our process.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foresoftware%2Froodles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foresoftware%2Froodles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foresoftware%2Froodles/lists"}