{"id":15708001,"url":"https://github.com/rzr/iotjs-express","last_synced_at":"2025-09-13T19:47:30.929Z","repository":{"id":34221761,"uuid":"172125887","full_name":"rzr/iotjs-express","owner":"rzr","description":"Basic reimplementation of Express.js for IoT.js or Node","archived":false,"fork":false,"pushed_at":"2023-12-18T01:22:56.000Z","size":248,"stargazers_count":5,"open_issues_count":8,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-08-27T09:40:44.838Z","etag":null,"topics":["iot","js"],"latest_commit_sha":null,"homepage":"https://mastodon.social/@rzr/104228324508952903#:IotJsExpress","language":"JavaScript","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/rzr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","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},"funding":{"github":["rzr"],"custom":["https://www.paypal.me/rzrfreefr","www.rzr.online.fr"]}},"created_at":"2019-02-22T19:49:27.000Z","updated_at":"2024-02-07T19:22:32.000Z","dependencies_parsed_at":"2023-02-16T02:30:35.518Z","dependency_job_id":"8a534cb7-1638-4cea-83e1-a523042f4c8d","html_url":"https://github.com/rzr/iotjs-express","commit_stats":{"total_commits":269,"total_committers":7,"mean_commits":38.42857142857143,"dds":0.5427509293680297,"last_synced_commit":"a4411e2368e994e757c006c850c7ad194df27e83"},"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/rzr/iotjs-express","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rzr%2Fiotjs-express","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rzr%2Fiotjs-express/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rzr%2Fiotjs-express/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rzr%2Fiotjs-express/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rzr","download_url":"https://codeload.github.com/rzr/iotjs-express/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rzr%2Fiotjs-express/sbom","scorecard":{"id":793391,"data":{"date":"2025-08-11","repo":{"name":"github.com/rzr/iotjs-express","commit":"bf85c2f7f43216bb3cdf38efd0e292b7f6f940c6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.7,"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":"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":"Code-Review","score":-1,"reason":"Found no human activity in the last 30 changesets","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":"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":"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/fediverse-action.yml:1","Warn: no topLevel permission defined: .github/workflows/npm-publish.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":"CII-Best-Practices","score":2,"reason":"badge detected: InProgress","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":"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":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":"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"}},{"name":"Pinned-Dependencies","score":1,"reason":"dependency not pinned by hash detected -- score normalized to 1","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fediverse-action.yml:9: update your workflow using https://app.stepsecurity.io/secureworkflow/rzr/iotjs-express/fediverse-action.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/fediverse-action.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/rzr/iotjs-express/fediverse-action.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/rzr/iotjs-express/npm-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/rzr/iotjs-express/npm-publish.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:13: pin your Docker image by updating debian:10 to debian:10@sha256:58ce6f1271ae1c8a2006ff7d3e54e9874d839f573d8009c20154ad0f2fb0a225","Warn: containerImage not pinned by hash: extra/tools/openfaas/Dockerfile:13: pin your Docker image by updating rzrfreefr/iotjs-express:v0.0.16 to rzrfreefr/iotjs-express:v0.0.16@sha256:24fb332b6b3b0a7c1868b5fcaef3314ec70cfaf366a9c42c894676b395181538","Info:   0 out of   3 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   2 third-party GitHubAction dependencies pinned","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":"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":8,"reason":"2 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275"],"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":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 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"}}]},"last_synced_at":"2025-08-23T08:13:00.205Z","repository_id":34221761,"created_at":"2025-08-23T08:13:00.205Z","updated_at":"2025-08-23T08:13:00.205Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275020168,"owners_count":25391650,"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-09-13T02:00:10.085Z","response_time":70,"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":["iot","js"],"created_at":"2024-10-03T20:43:30.440Z","updated_at":"2025-09-13T19:47:30.899Z","avatar_url":"https://github.com/rzr.png","language":"JavaScript","funding_links":["https://github.com/sponsors/rzr","https://www.paypal.me/rzrfreefr","www.rzr.online.fr"],"categories":[],"sub_categories":[],"readme":"# IOTJS-EXPRESS #\n\n[![GitHub forks](\nhttps://img.shields.io/github/forks/rzr/iotjs-express.svg?style=social\u0026label=Fork\u0026maxAge=2592000\n)](\nhttps://GitHub.com/rzr/iotjs-express/network/\n)\n[![license](\nhttps://img.shields.io/badge/license-MIT-0.svg\n)](MIT)\n[![Build Status](\nhttps://travis-ci.org/rzr/iotjs-express.svg?branch=master\n)](\nhttps://travis-ci.org/rzr/iotjs-express\n)\n[![NPM](\nhttps://img.shields.io/npm/v/iotjs-express.svg\n)](\nhttps://www.npmjs.com/package/iotjs-express\n)\n[![JsDelivr](\nhttps://data.jsdelivr.com/v1/package/npm/iotjs-express/badge\n)](\nhttps://www.jsdelivr.com/package/npm/iotjs-express\n)\n[![IRC Channel](\nhttps://img.shields.io/badge/chat-on%20freenode-brightgreen.svg\n)](\nhttps://kiwiirc.com/client/irc.freenode.net/#iot\n)\n[![Docker Pulls](\nhttps://img.shields.io/docker/pulls/rzrfreefr/iotjs-express.svg\n)](\nhttps://hub.docker.com/r/rzrfreefr/iotjs-express\n)\n[![Automated Builds](\nhttps://img.shields.io/docker/cloud/automated/rzrfreefr/iotjs-express.svg\n)](\nhttps://cloud.docker.com/repository/docker/rzrfreefr/iotjs-express/timeline\n)\n[![Build Status](\nhttps://img.shields.io/docker/cloud/build/rzrfreefr/iotjs-express.svg\n)](\nhttps://hub.docker.com/r/rzrfreefr/iotjs-express/builds\n)\n[![codebeat badge](\nhttps://codebeat.co/badges/b9167a25-1c70-4aad-8d32-2a08eb253e6e\n)](\nhttps://codebeat.co/projects/github-com-rzr-iotjs-express-master\n)\n[![Codacy Badge](\nhttps://api.codacy.com/project/badge/Grade/7fe74bd1d67d445888268a2eb48e7d6e\n)](\nhttps://app.codacy.com/app/rzr/iotjs-express?utm_source=github.com\u0026utm_medium=referral\u0026utm_content=rzr/iotjs-express\u0026utm_campaign=Badge_Grade_Dashboard\n)\n[![CII Best Practices](\nhttps://bestpractices.coreinfrastructure.org/projects/3297/badge\n)](\nhttps://bestpractices.coreinfrastructure.org/projects/3297\n)\n[![Fediverse](\nhttps://img.shields.io/mastodon/follow/279303?domain=https%3A%2F%2Fmastodon.social\u0026style=social\n)](\nhttps://mastodon.social/@rzr/104148998830650482#IotJsExpress#\n)\n\n[![NPM](\nhttps://nodei.co/npm/iotjs-express.png\n)](\nhttps://npmjs.org/package/iotjs-express\n)\n\n## INTRODUCTION ##\n\nWhile ExpressJs claims to be minimalist,\nmany dependencies are required and thus can't support IoT.js runtime\n(powered by JerryScript an alternative engine for MicroControllers).\n\nInstead of porting the whole project to older ECMA standards,\nbasic routing was re-implemented, and API tried to be preserved.\n\nOriginally this module was done for \"webthing-iotjs\" project,\na library to build webthings to connect to WebThingsIo gateway.\n\nSource file was bundled into project, but then pulled out as this standalone module,\nwhich can be used by both runtime Node.Js and IoT.js.\n\n[![Presentation](\nhttps://image.slidesharecdn.com/webthing-iotjs-20181022rzr-181027220201/95/webthingiotjs20181027rzr-17-638.jpg\n)](\nhttps://www.slideshare.net/rzrfreefr/webthingiotjs20181022rzr-120959360/#\n\"WebThingIotJs\")\n\n## USAGE WITH IOTJS ##\n\n```sh\nmkdir iotjs_modules\ngit clone https://github.com/rzr/iotjs-express iotjs_modules/iotjs-express\ncd iotjs_modules/iotjs-express\nmake start \u0026\n#| iotjs example\n\ncurl -i http://localhost:8080/.well-known/security.txt\n#| HTTP/1.1 200 OK\n#| access-control-allow-origin: *\n#| access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept\n#| access-control-allow-methods: GET, HEAD, PUT, POST, DELETE\n#|\n#| Contact: https://www.npmjs.com/~rzr\n\ncurl -i http://localhost:8080/favicon.ico\n#| HTTP/1.1 404 Not Found\n#| content-length: 23\n#| Error: 404 (Not Found)\n\ncurl -i http://localhost:8080/~rzr\n#| {\"user\":\"rzr\"}\n\ncurl -X PUT -d '{\"value\":42}' http://localhost:8080/db/some-key\n#| {\"some-key\":42}\n\ncurl -X PUT -d '{\"value\":1984}' http://localhost:8080/db/some-other-key\n#| {\"some-key\":42,\"some-other-key\":1984}\n\ncurl -i  http://localhost:8080/static/README.md\n#| HTTP/1.1 200 OK\n#| # IOTJS-EXPRESS #\n#| (...)\n```\n\n[![iotjs_modules](\nhttps://image.slidesharecdn.com/webthing-iotjs-tizenrt-cdl2018-20181117rzr-181118110813/95/webthingiotjstizenrtcdl201820181117rzr-24-638.jpg\n)](\nhttps://www.slideshare.net/rzrfreefr/webthingiotjstizenrtcdl201820181117rzr/24\n\"iotjs_modules\")\n\n## USAGE WITH NODE ##\n\nIt's mostly the same:\n\n```sh\nnpm install iotjs_express\ncd node_modules/iotjs-express\nnpm start\n# Or:\nmake start runtime=node\n#| node example\n```\n\n## USAGE WITH DOCKER ##\n\n```sh\ndocker run --net host rzrfreefr/iotjs-express:latest\ncurl http://localhost:8080/.well-known/security.txt\n#| Contact: https://www.npmjs.com/~rzr\n\n# Or from sources\ndocker-compose up\ncurl http://localhost:8080/.well-known/security.txt\n#| Contact: https://www.npmjs.com/~rzr\n```\n\n## USAGE WITH MINIKUBE ##\n\n```sh\n\nname=\"iotjs-express\"\nurl=\"https://raw.githubusercontent.com/rzr/iotjs-express/master/extra/tools/kube/$name.yml\"\nurl=https://raw.githubusercontent.com/rzr/iotjs-express/sandbox/rzr/devel/master/extra/tools/kube/$name.yml\nkubectl=kubectl\n\nminikube version\n\nminikube start || minikube logs --alsologtostderr\n\n$kubectl version\n\n$kubectl apply -f \"${url}\"\n#| deployment.extensions/iotjs-express created\n#| service/iotjs-express created\n\ntime minikube service ${name} --url\n#| http://192.168.99.102:30080\ntime minikube service ${name}\n#| 🎉  Opening kubernetes service default/iotjs-express in default browser...\n```\n\n## USAGE WITH K3S ##\n\n```sh\nproject=\"iotjs-express\"\nimage=\"rzrfreefr/${project}:latest\"\nkubectl=\"sudo kubectl\"\n\nsudo sync\nsudo snap remove microk8s\ncurl -sfL https://get.k3s.io | sh - # v0.7.0\nsudo systemctl restart k3s.service || sudo systemctl status k3s.service\n\n$kubectl get nodes # Wait \"Ready state\"\n#| {host}   NotReady   master   5s    v1.14.4-k3s.1\n#| (...)\n#| {host}   Ready    master   51s   v1.14.4-k3s.1\n\n$kubectl run \"${project}\" --image=\"${image}\"\n\n$kubectl get all --all-namespaces | grep \"$project\"\n#| default       pod/iotjs-express-...-...   1/1     Running     0          ..s\n\npod=$($kubectl get all --all-namespaces \\\n  | grep -o \"pod/${project}.*\" | cut -d/ -f2 | awk '{ print $1}' \\\n  || echo failure) \u0026\u0026 echo pod=\"$pod\"\n$kubectl describe pod \"$pod\"  | grep 'Status:             Running'\nip=$($kubectl describe pod \"$pod\" | grep 'IP:' | awk '{ print $2 }') \u0026\u0026 echo \"ip=${ip}\"\n\ncurl http://$ip:8080/.well-known/security.txt\n```\n\n## DEMO ##\n\nIn \"webthing-iotjs-20180621rzr\" video,\nEdison's running a webthing server powered by iotjs-express framework to build routes,\n(it relies on IoT.js's http module, API is aligned to node)\n\n[![webthing-iotjs-20180621rzr](\nhttps://repository-images.githubusercontent.com/172125887/a54ff900-9e77-11ea-950f-f5510b42259b#./file/webthing-iotjs-20180621rzr.gif\n)](\nhttps://mastodon.social/@rzr/103595181296044323#webthing-iotjs-20180621rzr\n\"Demo\")\n\n*   \u003chttps://player.vimeo.com/video/276279690#webthing-iotjs-20180621rzr\u003e\n\nDemo also shows following systems:\n\n*   Edison: iotjs-express + webthing-iotjs on Jubilinux (Debian fork).\n*   RaspberryPi: webthings-gateway + express.js on Raspbian\n*   Galaxy note: SamsungInternet web browser for Android.\n\n## EXTRA EXAMPLES ##\n\n```sh\niotjs example/client.js 8080 localhost /.well-known/security.txt\nContact: https://www.npmjs.com/~rzr\n```\n\nAn extra example is added to show how to make a bridge from HTTP/REST to MQTT.\n\n## RESOURCES ##\n\n*   \u003chttps://libraries.io/npm/iotjs-express\u003e\n*   \u003chttps://www.openhub.net/p/iotjs-express/\u003e\n*   \u003chttps://microbadger.com/images/rzrfreefr/iotjs-express\u003e\n*   \u003chttps://glitch.com/edit/#!/rzr-iotjs-express\u003e\n*   \u003chttps://rzr-iotjs-express.glitch.me/.well-known/security.txt\u003e\n*   \u003chttps://rzr-iotjs-express.glitch.me/static/README.md\u003e\n*   \u003chttps://www.npmjs.com/browse/depended/iotjs-express\u003e\n*   \u003chttps://mastodon.social/@rzr/104148998830650482\u003e\n*   \u003chttps://www.slideshare.net/rzrfreefr/webthingiotjs20181022rzr-120959360\u003e\n*   \u003chttps://purl.org/rzr/presentations\u003e\n*   \u003chttp://expressjs.com/\u003e\n*   \u003chttps://www.npmjs.com/package/express\u003e\n*   \u003chttps://en.wikipedia.org/wiki/Express.js\u003e\n*   \u003chttps://iotjs.net/\u003e\n*   \u003chttps://github.com/rzr/webthing-iotjs/wiki/IotJs\u003e\n*   \u003chttps://github.com/pando-project/iotjs/blob/master/docs/api/IoT.js-API-HTTP.md\u003e\n*   \u003chttps://github.com/jerryscript-project\u003e\n*   \u003chttps://nodejs.org/api/http.html\u003e\n*   \u003chttps://tools.ietf.org/html/rfc2616\u003e\n*   \u003chttps://en.wikipedia.org/wiki/Representational_state_transfer\u003e\n*   \u003chttps://github.com/rzr/webthing-iotjs/wiki\u003e\n*   \u003chttps://github.com/runtimejs/runtime/issues/151#\u003e (Open)\n*   \u003chttps://github.com/rzr/webthing-iotjs/wiki/Kube\u003e\n*   \u003chttps://github.com/the-benchmarker/web-frameworks/issues/1643\u003e (Merged)\n*   \u003chttps://github.com/jerryscript-project/iotjs-modules/pull/2\u003e (Merged)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frzr%2Fiotjs-express","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frzr%2Fiotjs-express","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frzr%2Fiotjs-express/lists"}