{"id":24186290,"url":"https://github.com/kanocomputing/kit-app-shell","last_synced_at":"2025-09-21T10:31:34.903Z","repository":{"id":33856961,"uuid":"159816227","full_name":"KanoComputing/kit-app-shell","owner":"KanoComputing","description":"App Shell monorepo","archived":false,"fork":false,"pushed_at":"2022-11-10T15:33:59.000Z","size":3746,"stargazers_count":5,"open_issues_count":7,"forks_count":2,"subscribers_count":24,"default_branch":"master","last_synced_at":"2025-08-28T23:41:25.676Z","etag":null,"topics":["dev-tools","kits-platform"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/KanoComputing.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}},"created_at":"2018-11-30T11:48:58.000Z","updated_at":"2022-10-12T03:34:02.000Z","dependencies_parsed_at":"2023-01-15T03:00:43.289Z","dependency_job_id":null,"html_url":"https://github.com/KanoComputing/kit-app-shell","commit_stats":null,"previous_names":[],"tags_count":95,"template":false,"template_full_name":null,"purl":"pkg:github/KanoComputing/kit-app-shell","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KanoComputing%2Fkit-app-shell","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KanoComputing%2Fkit-app-shell/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KanoComputing%2Fkit-app-shell/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KanoComputing%2Fkit-app-shell/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KanoComputing","download_url":"https://codeload.github.com/KanoComputing/kit-app-shell/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KanoComputing%2Fkit-app-shell/sbom","scorecard":{"id":77014,"data":{"date":"2025-08-11","repo":{"name":"github.com/KanoComputing/kit-app-shell","commit":"e6ec6da58a462be6b17a22c81116ae394eb849b6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.6,"checks":[{"name":"Code-Review","score":3,"reason":"Found 9/24 approved changesets -- score normalized to 3","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":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":"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":"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":"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":9,"reason":"binaries present in source code","details":["Warn: binary detected: packages/windows/vccorlib140.dll: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":"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":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"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":"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":"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 '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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 16 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":0,"reason":"156 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v88g-cgmw-v5xw","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-6vrv-94jv-crrg","Warn: Project is vulnerable to: GHSA-f9mq-jph6-9mhm","Warn: Project is vulnerable to: GHSA-h9jc-284h-533g","Warn: Project is vulnerable to: GHSA-m93v-9qjc-3g79","Warn: Project is vulnerable to: GHSA-hvf8-h2qh-37m9","Warn: Project is vulnerable to: GHSA-mpjm-v997-c4h4","Warn: Project is vulnerable to: GHSA-3p22-ghq8-v749","Warn: Project is vulnerable to: GHSA-77xc-hjv8-ww97","Warn: Project is vulnerable to: GHSA-mq8j-3h7h-p8g7","Warn: Project is vulnerable to: GHSA-p2jh-44qj-pf2v","Warn: Project is vulnerable to: GHSA-p7v2-p9m8-qqg7","Warn: Project is vulnerable to: GHSA-7x97-j373-85x5","Warn: Project is vulnerable to: GHSA-7m48-wc93-9g85","Warn: Project is vulnerable to: GHSA-qqvq-6xgj-jw8g","Warn: Project is vulnerable to: GHSA-6r2x-8pq8-9489","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-xf7w-r453-m56c","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-qqgx-2p2h-9c37","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-jg8v-48h5-wgxg","Warn: Project is vulnerable to: GHSA-36fh-84j7-cv5h","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-vh95-rmgr-6w4m","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-8hfj-j24r-96c4","Warn: Project is vulnerable to: GHSA-wc69-rhjr-hc9g","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-j44m-qm6p-hp7m","Warn: Project is vulnerable to: GHSA-3jfq-g458-7qm9","Warn: Project is vulnerable to: GHSA-5955-9wpr-37jh","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-r628-mhmh-qjhw","Warn: Project is vulnerable to: GHSA-9r2w-394v-53qc","Warn: Project is vulnerable to: GHSA-qq89-hq3f-393p","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-7p7h-4mm5-852v","Warn: Project is vulnerable to: GHSA-c4w7-xm78-47vh","Warn: Project is vulnerable to: GHSA-p9pc-299p-vxgp","Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-6chw-6frg-f759","Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","Warn: Project is vulnerable to: GHSA-2mj8-pj3j-h362","Warn: Project is vulnerable to: GHSA-gqf6-75v8-vr26","Warn: Project is vulnerable to: GHSA-v45m-2wcp-gg98","Warn: Project is vulnerable to: GHSA-pp7h-53gx-mx7r","Warn: Project is vulnerable to: GHSA-qwcr-r2fm-qrc7","Warn: Project is vulnerable to: GHSA-cwfw-4gq5-mrqx","Warn: Project is vulnerable to: GHSA-g95f-p29q-9xw4","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-w8qv-6jwh-64r5","Warn: Project is vulnerable to: GHSA-hm92-vgmw-qfmx","Warn: Project is vulnerable to: GHSA-257v-vj4p-3w2h","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-p28h-cc7q-c4fg","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-73v8-v6g4-vrpm","Warn: Project is vulnerable to: GHSA-h6ch-v84p-w6p9","Warn: Project is vulnerable to: GHSA-ff7x-qrg7-qggm","Warn: Project is vulnerable to: GHSA-rv95-896h-c2vc","Warn: Project is vulnerable to: GHSA-qw6h-vgh9-j6wx","Warn: Project is vulnerable to: GHSA-8r6j-v8pm-fqw3","Warn: Project is vulnerable to: MAL-2023-462","Warn: Project is vulnerable to: GHSA-4q6p-r6v2-jvc5","Warn: Project is vulnerable to: GHSA-pfrx-2q88-qq97","Warn: Project is vulnerable to: GHSA-q42p-pg8m-cqh6","Warn: Project is vulnerable to: GHSA-w457-6q6x-cgp9","Warn: Project is vulnerable to: GHSA-62gr-4qp9-h98f","Warn: Project is vulnerable to: GHSA-f52g-6jhx-586p","Warn: Project is vulnerable to: GHSA-2cf5-4w76-r9qv","Warn: Project is vulnerable to: GHSA-3cqr-58rm-57f8","Warn: Project is vulnerable to: GHSA-g9r4-xpmj-mj65","Warn: Project is vulnerable to: GHSA-q2c6-c6pm-g3gh","Warn: Project is vulnerable to: GHSA-765h-qjxv-5f44","Warn: Project is vulnerable to: GHSA-f2jv-r9rf-7988","Warn: Project is vulnerable to: GHSA-pfq8-rq6v-vf5m","Warn: Project is vulnerable to: GHSA-rc47-6667-2j5j","Warn: Project is vulnerable to: GHSA-pc5p-h8pf-mvwp","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","Warn: Project is vulnerable to: GHSA-w7q9-p3jq-fmhm","Warn: Project is vulnerable to: GHSA-xvf7-4v9q-58w6","Warn: Project is vulnerable to: GHSA-2pr6-76vf-7546","Warn: Project is vulnerable to: GHSA-8j8c-7jfh-h6hx","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-6c8f-qphg-qjgp","Warn: Project is vulnerable to: GHSA-jf85-cpcp-j695","Warn: Project is vulnerable to: GHSA-fvqr-27wr-82fm","Warn: Project is vulnerable to: GHSA-4xc9-xhrj-v574","Warn: Project is vulnerable to: GHSA-x5rq-j2xg-h7qm","Warn: Project is vulnerable to: GHSA-p6mc-m468-83gw","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-h726-x36v-rx45","Warn: Project is vulnerable to: GHSA-4xcv-9jjx-gfj3","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-hxm2-r34f-qmc5","Warn: Project is vulnerable to: GHSA-fhjf-83wg-r2j9","Warn: Project is vulnerable to: GHSA-92xj-mqp7-vmcj","Warn: Project is vulnerable to: GHSA-wxgw-qj99-44c2","Warn: Project is vulnerable to: GHSA-5rrq-pxf6-6jx5","Warn: Project is vulnerable to: GHSA-8fr3-hfg3-gpgp","Warn: Project is vulnerable to: GHSA-gf8q-jrpm-jvxq","Warn: Project is vulnerable to: GHSA-2r2c-g63r-vccr","Warn: Project is vulnerable to: GHSA-cfm4-qjh2-4765","Warn: Project is vulnerable to: GHSA-x4jg-mjrx-434g","Warn: Project is vulnerable to: GHSA-px4h-xg32-q955","Warn: Project is vulnerable to: GHSA-jmqm-f2gx-4fjv","Warn: Project is vulnerable to: GHSA-rp65-9cf3-cjxr","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-g6ww-v8xp-vmwg","Warn: Project is vulnerable to: GHSA-x565-32qp-m3vf","Warn: Project is vulnerable to: GHSA-4cpg-3vgw-4877","Warn: Project is vulnerable to: GHSA-566m-qj78-rww5","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-x3m3-4wpv-5vgc","Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-h9rv-jmmf-4pgx","Warn: Project is vulnerable to: GHSA-hxcc-f52p-wc94","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-4g88-fppr-53pp","Warn: Project is vulnerable to: GHSA-4jqc-8m5r-9rpr","Warn: Project is vulnerable to: GHSA-gp95-ppv5-3jc5","Warn: Project is vulnerable to: GHSA-54xq-cgqr-rpm3","Warn: Project is vulnerable to: GHSA-g4rg-993r-mgx7","Warn: Project is vulnerable to: GHSA-4rq4-32rv-6wp6","Warn: Project is vulnerable to: GHSA-64g7-mvw6-v9qj","Warn: Project is vulnerable to: GHSA-wpg7-2c88-r8xv","Warn: Project is vulnerable to: GHSA-gff7-g5r8-mg8m","Warn: Project is vulnerable to: GHSA-vx3p-948g-6vhq","Warn: Project is vulnerable to: GHSA-pq67-2wwv-3xjx","Warn: Project is vulnerable to: GHSA-8cj5-5rvv-wf4v","Warn: Project is vulnerable to: GHSA-4wf5-vphf-c2xc","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-w5p7-h5w8-2hfq","Warn: Project is vulnerable to: GHSA-38fc-wpqx-33j7","Warn: Project is vulnerable to: GHSA-cf4h-3jhx-xvhq","Warn: Project is vulnerable to: GHSA-rv73-9c8w-jp4c","Warn: Project is vulnerable to: GHSA-6fc8-4gx4-v693","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q","Warn: Project is vulnerable to: GHSA-776f-qx25-q3cc","Warn: Project is vulnerable to: GHSA-h6q6-9hqw-rwfv","Warn: Project is vulnerable to: GHSA-5fg8-2547-mr8q","Warn: Project is vulnerable to: GHSA-crh6-fp67-6883"],"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-15T05:05:42.946Z","repository_id":33856961,"created_at":"2025-08-15T05:05:42.946Z","updated_at":"2025-08-15T05:05:42.946Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276228989,"owners_count":25606937,"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-21T02:00:07.055Z","response_time":72,"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":["dev-tools","kits-platform"],"created_at":"2025-01-13T12:35:00.693Z","updated_at":"2025-09-21T10:31:34.414Z","avatar_url":"https://github.com/KanoComputing.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kash — Kit App SHell\n\n_kash_ is a web app platform built on top of [Electron](https://electronjs.org/) and [Cordova](https://cordova.apache.org/) that allows us to develop, test and deploy applications that interact with Kano hardware kits across several desktop and mobile platforms as well as the web from a single codebase.\n\nThe shell will run any HTML/CSS/JS frontend. On all platforms extept _web_, it allows the app to communicate with Kano bluetooth/serial devices using the [@kano/devices-sdk](https://github.com/KanoComputing/kano-devices-sdk).\n\nThe `kash` CLI tool provides an unified interface to build, run, test and sign your app across all [supported platforms](#Platforms). The usual workflow looks like this:\n\n```sh\nyarn add --dev @kano/kit-app-shell-cli\n\n# Install the platforms you want to use\nyarn add --dev @kano/kit-app-shell-macos\nyarn add --dev @kano/kit-app-shell-ios\n```\n\nAdd the kash script to your `package.json`\n\n```json\n{\n    \"scripts\": {\n        \"kash\": \"kash\"\n    }\n}\n```\n\nThis makes your local version of cache accessible using `yarn kash`\n\n```\n# Build an *.ipa for iOS using Cordova\nyarn kash build ios ./your-app-dir --out ./build-dir\n\n# Run your app using electron on macOS\nyarn kash run macos ./your-app-dir\n```\n\n## Setup\n\nDepending on the platforms you're planning to use, you might need to set up a different set of external tools on your system (xcode, Android Studio, etc).\n\n_TODO: Figure this out._\n\n## Usage\n\n`kash` has a sub-comand-based interface. The commands are platform-specific. Make sure the platform you want to use is installed.\n\n```\nUsage: kash \u003ccommand\u003e \u003cplatform\u003e [options]\n```\n\nHere's an overview:\n\n### run\n\nStarts the app locally with live reload for development purposes. The behaviour of `run` depends on the target platform. For Cordova-based platforms, it will build an app and deploy it to a test device (if available). See the platform-specific notes for more information.\n\n**Example**:\n\n```\nkash run ios ../app-folder\n```\n\n### build\n\nBuilds the app for the selected platform. The build will be stored in the directory specified by the `-o, --out` parameter.\n\n**Example**:\n\n```\nkash build ios ../app-folder -o ../output-dir\n```\n\n### configure\n\nA CLI-based UI will walk you through the set up required for each platform. The configuration is system-wide and shared between different projects. You might need to run this before you first build.\n\n### test\n\nRuns integration tests against a prebuilt app (specified via `--prebuilt-app`).\n\n**Example**:\n\n```\nkash test ios ../app-folder --prebuilt-app ../output-dir/app-build.ipa\n```\n\n### sign\n\nSign a build for distribution. Not every platform implements this command.\n\n**Example**:\n\n```\nkash sign macos ../output-dir/app-build.ipa\n```\n\n## Creating a New App\n\nThis guide explains how to set up a minimal app using `kash` and try it out using the _web_ platform. We'll start with an empty app directory:\n\n```sh\nmkdir kash-example\ncd kash-example\n```\n\nWe'll install the `kash` CLI tool and the _web_ platform.\n\n```sh\nyarn add --dev @kano/kit-app-shell-cli\nyarn add --dev @kano/kit-app-shell-web\n```\n\nAdd the kash script to your `package.json`\n\n```json\n{\n    \"scripts\": {\n        \"kash\": \"kash\"\n    }\n}\n```\n\nThis makes your local version of cache accessible using `yarn kash`\n\nWhen starting up, the app shell will be looking for two files:\n\n* `config/default.json` to provide info necessary to build the app\n* `index.js` to define a class that will bootstrap the UI\n\nIn the config, we'll need to set the `APP_ID` and `APP_NAME` options. These will be used by Cordova/Electron when building the app. You can also provide environment-specific configs (e.g., `staging.json`, `production.json`) in the same directory. To learn more about that, see the [TODO comprehensive guide](#TODO). In this case, `config/default.json` will be enough:\n\n```json\n{\n    \"APP_ID\": \"com.example.app\",\n    \"APP_NAME\": \"Example App\"\n}\n```\n\nThen we'll need to define the main class in `index.js`:\n\n```js\nclass ExampleApp {\n    constructor(bus, config) {\n        this.root = document.createElement('div');\n        this.root.innerText = `${config.APP_NAME} - ${config.ENV}`;\n    }\n}\n\nShell.define(ExampleApp);\n```\n\nThe app shell will pass to the constructor a reference to the `bus` that can be used to communicate with devices and `config` to access the app configuration above. It will expect you to initialise the `root` property with your app's UI which will be stamped to the DOM when the app loads. For the purposes of this example, we create a simple `div` with the application's name in it.\n\nWith the main class in place, we can test the setup on the _web_ platform by running `kash` from the project tree as follows:\n\n```sh\nyarn kash run web .\n```\n\nThe _web_ platform will start a simple web server.\n\n\u003cimg src=\"https://user-images.githubusercontent.com/169328/51049160-f1710500-15c4-11e9-9e05-b2b6110fe7ec.png\" width=\"486\"\u003e\n\nYou can test the app by going to http://localhost:4000:\n\n\u003cimg src=\"https://user-images.githubusercontent.com/169328/51050307-39455b80-15c8-11e9-9591-090c6c216650.png\" width=\"400\"\u003e\n\n## Development\n\nThis repository contains the CLI, core module and platform implementation for the App Shell platform\n\nThis repository uses lerna and yarn workspaces to manage dependencies, development and tests of its packages\n\nPull the dependencies with `lerna bootstrap`.\n\nUse `yarn tsc -b --watch` to run the typescript compiler on the whole codebase. This will watch changes and run incremental builds, then you can work on one of the following:\n\n## Packages\n\n![Dependencies](https://user-images.githubusercontent.com/169328/50916494-35cc9b80-1433-11e9-98b3-bbe5e7431709.png)\n\n## [@kano/kit-app-shell-core](./packages/core)\n\nKash core. Contains the platforms shared features. Used to bundle, run or test apps.\nAlso contains utilities like logging and config loading\n\n## Tools\n\n### [@kano/kit-app-shell-cli](./packages/cli)\n\nKash CLI. Run, build, test from your command line.\n\n### [@kano/kit-app-shell-test](./packages/test)\n\nUtilities to run tests on remote device providers.\n\n## Platform Libraries\n\n### [@kano/kit-app-shell-electron](./packages/electron)\n\nKash desktop platform. Runs your app using electron. To build for desktop, use `windows` or `macos`.\n\n### [@kano/kit-app-shell-cordova](./packages/cordova)\n\nUses the cordova project to create mobile apps.\n\n## Platforms\n\n### [@kano/kit-app-shell-windows](./packages/windows)\n\nExtends the electron platform. Used to build a windows application and create an installer.\n\n### [@kano/kit-app-shell-windows-store](./packages/windows-store)\n\nExtends the windows platform and builds an `appx` package instead of a windows installer.\n\n### [@kano/kit-app-shell-macos](./packages/macos)\n\nExtends the electron platform. Used to build a macOS application and create a `.app` package.\n\n### [@kano/kit-app-shell-kano](./packages/kano)\n\nExtends the electron platform. Used to build a Kano OS application and create a `.deb` package.\n\n### [@kano/kit-app-shell-android](./packages/android)\n\nExtends the cordova platform to create a .apk.\n\n### [@kano/kit-app-shell-android-legacy](./packages/android-legacy)\n\nExtends the android platform to create a .apk using crosswalk as a webview.\n\n### [@kano/kit-app-shell-ios](./packages/ios)\n\nExtends the cordova platform to create an iOS app.\n\n### [@kano/kit-app-shell-web](./packages/web)\n\nKash web platform. Runs your app in a browser. Builds a hostable website.\n\n## Coding style\n\nThis project runs on the Node.js platform and will try to embrace it when possible. It uses commonjs modules to run on node with no transpilation. TODO: Investigate transpiled .mjs that will become sources once modules are shipped.\n\nAsychronous tasks uses Promises and APIs using callbacks are wrapped using `util.promisify`. This will allow an easy transition to async functions if needed. TODO: Investigate async function.\n\nObject merging: Use `Object.assign` when possible. `deepmerge` if necessary.\n\n## dependencies\n\nTo keep this project's slim and fast, dependencies need to be reviewed to ensure they provide the deisred functionality with the smallest downloaded package size and even smaller loaded file size if possible.\n\nWith tha in mind, every packages in this repository need to rely on the same packages for the same features to avoid unnecessary duplications.\n\n|Feature| Package | Reason |\n|---|---|---|\n|Terminal colors|`chalk`|Slim and performant|\n|CLI|`sywac`|No dependencies, similar but outperforms yargs|\n|Testing|`mocha`|Opiniated|\n|Assertion|`chai`\u003cbr\u003e`chai-fs`|Opiniated|\n|Mock|`mock-fs`\u003cbr\u003e`mock-require`|Opiniated|\n|Coverage|`nyc`|Opiniated|\n|FS managment|`mkdirp`\u003cbr\u003e`rimraf`|Opiniated|\n|Pattern matching|`glob`|Opiniated TODO: try `fast-glob`|\n|Object merging|`deepmerge`|No dependencies|\n|HTML parsing|`parse5`|Fastest and spec compliant|\n|JS parsing|`acorn`|Small and fast|\n|XML parsing|`elementtree`|Used by `cordova-config` TODO: move away from `cordova-config` if it improves performances|\n|Image manipulation|`sharp`|Cross platform, high speed, no dependencies|\n|HTTP and HTTPS|`request`|Complete, supports stream|\n|Server|`connect`\u003cbr\u003e`cors`\u003cbr\u003e`serve-static`|Fast, lots of middlewares|\n\n## Roadmap\n\nTODOs for 0.0.3-alpha.4:\n\n - Allow for env var defining tmp directory. This can be used in docker containers so thay can persist the cache across builds\n - ...\n\n## TODO:\n - Create a Dockerfile with the setup to create on any platform. Host the image on dockerhub\n - Add a `bootstrap/setup/doctor` subcommand that each platform will help users set up their environment for building apps for various platforms (e.g. XCode setup, Android Studio, Windows build tools)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkanocomputing%2Fkit-app-shell","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkanocomputing%2Fkit-app-shell","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkanocomputing%2Fkit-app-shell/lists"}