{"id":41984069,"url":"https://github.com/junwatu/svh","last_synced_at":"2026-01-26T00:02:58.118Z","repository":{"id":10317126,"uuid":"12444204","full_name":"junwatu/svh","owner":"junwatu","description":"A simple server for html - javascript web client app development","archived":false,"fork":false,"pushed_at":"2020-07-08T01:49:15.000Z","size":132,"stargazers_count":9,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-05T20:15:16.393Z","etag":null,"topics":["developer-tools","hacktoberfest","ngrok","static-server","svh"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/junwatu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-08-28T20:47:25.000Z","updated_at":"2020-10-06T06:08:58.000Z","dependencies_parsed_at":"2022-08-30T13:50:18.659Z","dependency_job_id":null,"html_url":"https://github.com/junwatu/svh","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/junwatu/svh","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junwatu%2Fsvh","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junwatu%2Fsvh/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junwatu%2Fsvh/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junwatu%2Fsvh/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/junwatu","download_url":"https://codeload.github.com/junwatu/svh/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junwatu%2Fsvh/sbom","scorecard":{"id":542989,"data":{"date":"2025-08-11","repo":{"name":"github.com/junwatu/svh","commit":"a2507c58a15a1c997246d2ab331ef9fb5a45b966"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4,"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":"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/codeql-analysis.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":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":"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":"SAST","score":10,"reason":"SAST tool detected: CodeQL","details":["Info: SAST configuration detected: CodeQL","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":"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/codeql-analysis.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/junwatu/svh/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/junwatu/svh/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/junwatu/svh/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/junwatu/svh/codeql-analysis.yml/master?enable=pin","Info:   0 out of   4 GitHub-owned 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":"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":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"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-20T08:42:37.833Z","repository_id":10317126,"created_at":"2025-08-20T08:42:37.833Z","updated_at":"2025-08-20T08:42:37.833Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28761876,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T23:06:19.311Z","status":"ssl_error","status_checked_at":"2026-01-25T23:03:50.555Z","response_time":113,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["developer-tools","hacktoberfest","ngrok","static-server","svh"],"created_at":"2026-01-26T00:02:58.046Z","updated_at":"2026-01-26T00:02:58.111Z","avatar_url":"https://github.com/junwatu.png","language":"JavaScript","readme":"# SVH (Node Serve Here)\n\n\n[![Build Status](https://travis-ci.org/junwatu/svh.png?branch=master)](https://travis-ci.org/junwatu/svh)\n\nSimple file server for web.\n\n## Features\n\n- Configurable via cli options.\n- Auto watch files.\n- Auto reload browser.\n- Public site support through ngrok.\n- Files filter.\n\n## Usage\n\nInstall svh via the awesome npm\n\n```\n$ sudo npm install -g svh\n```\n\nhelp command\n\n```\n$ svh serve --help\n\nUsage: serve [options] [path]\n\n  Options:\n\n    -h, --help                    output usage information\n    -l, --log                     default is disabled\n    -d, --domain \u003cdomain\u003e         domain or hostname. default to localhost\n    -p, --port \u003cport\u003e             startServer port. default port is 3113\n    -m, --main \u003chomepage\u003e         index file to start. no extension (html only)\n    -w, --watch                   watch project root directory for file changes. default is enabled\n    -f, --files \u003cfiles\u003e           comma separated files extension to watch. default is all file types\n    -n, --ngrok                   using ngrok to expose local web server to internet. default is disabled\n    -N, --ngrok-path \u003cngrokpath\u003e  ngrok binary path. default path is local install\n    -s, --subdomain \u003csubdomain\u003e   subdomain for ngrok\n    -a, --auth \u003cauth\u003e             simple auth for ngrok\n\n```\n\nto run svh server on default port 3113\n\n```\n$ svh serve your_project_dir\n```\n\nor customize the port with `-p` option\n\n```\n$ svh serve -p 3003 your_project_dir\n```\n\nsvh will pickup `index.html` file by default but you can customize it with `-m` option, for example to pickup `main.html` as startup page type this command\n\n```\n$ svh serve -m main  your_project_dir\n```\n\nsvh will watch project directory and auto reload browser if there are any files changes.\nTo disable auto watch use `-w` option\n\n```\n$ svh serve -w your_project_dir\n```\n### Filter\n\nFrom version 0.1.0 you can use files filter through comma separated extension list by add `--files` command option\n\n```\n$ svh serve --files=html,css,js,jsx your_project_dir\n```\n\nby default svh will ignore `node_modules` directory.\n\n### ngrok 2\n\nsvh can expose your project to public via [ngrok][1]. svh  will auto download ngrok binary and install it in `vendor` folder. \n For example to expose `your_project_dir` to public internet just type this command\n\n```\n$ svh serve --ngrok your_project_dir\n\n```\n\nIf you want to use ngrok 2 but other version than local installed, you should pass ngrok path via `-N` option\n\n```\n$ svh serve -n -N /home/angel/bin/ngrok project_dir\n```\n\nTo expose your local project to public internet but with basic authentication just type this command\n\n```\n$ svh serve -n -a user:password project_dir\n``` \n\u003e Custom domain only for paid user\n\nYou can pass custom subdomain name via `-s` option. For example if you type this command\n\n```\n$ svh serve -n  -a shoot:angel -s cross-finger your_project_dir\n```\nthen you can access your local project on address\n\n```\nhttp://cross-finger.ngrok.io\n```\n\n\u003e Please note that only simple ngrok options that supported \n\nCurrently only support `http` tunneling, `--auth` and `--subdomain`.\n\n\n## Contribute\n\nPlease feel free to fork and pull any request.\n\nThank's\n\n\n## LICENSE\n\nThe MIT License (MIT)\n\nCopyright (c) 2016 Equan Pr.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\nto permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of\nthe Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\nTHE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS\nOR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT\nOR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n  [1]: https://ngrok.com/\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjunwatu%2Fsvh","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjunwatu%2Fsvh","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjunwatu%2Fsvh/lists"}