{"id":15293228,"url":"https://github.com/obastemur/iotz","last_synced_at":"2026-05-30T03:00:58.397Z","repository":{"id":57276413,"uuid":"134629931","full_name":"obastemur/iotz","owner":"obastemur","description":"compile things easy 🚀","archived":false,"fork":false,"pushed_at":"2020-08-03T21:05:40.000Z","size":7395,"stargazers_count":38,"open_issues_count":8,"forks_count":10,"subscribers_count":12,"default_branch":"master","last_synced_at":"2026-05-12T09:31:47.270Z","etag":null,"topics":["arduino","arm","azure","cli","compiler","iot","mbed"],"latest_commit_sha":null,"homepage":"","language":"C","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/obastemur.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOGS","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-05-23T22:01:03.000Z","updated_at":"2023-01-21T23:57:11.000Z","dependencies_parsed_at":"2022-08-31T01:00:53.682Z","dependency_job_id":null,"html_url":"https://github.com/obastemur/iotz","commit_stats":null,"previous_names":["azure/iotz"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/obastemur/iotz","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obastemur%2Fiotz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obastemur%2Fiotz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obastemur%2Fiotz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obastemur%2Fiotz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/obastemur","download_url":"https://codeload.github.com/obastemur/iotz/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obastemur%2Fiotz/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33678271,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"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":["arduino","arm","azure","cli","compiler","iot","mbed"],"created_at":"2024-09-30T16:45:07.724Z","updated_at":"2026-05-30T03:00:58.371Z","avatar_url":"https://github.com/obastemur.png","language":"C","funding_links":[],"categories":["C"],"sub_categories":[],"readme":"## iotz - compile things easy\n\n**DISCLAIMER**: I use this project for my day to day stuff and I know few other folks do the same.\nConcerned or have an idea? be vocal and create an issue.\n\n### in action\n\n![ARM mbed demo](contents/demo.gif)\n\n### requirements\n\nInstall [Node.js](https://nodejs.org/en/download/) 8+ and [Docker](https://docs.docker.com/install/).\n\n!! if you are on Windows, use Linux containers and share the C drive from settings.\n\n### how to install\n\n```\nnpm i iotz -g\n```\n\n```\niotz update\n```\n\n*You may need `sudo` to run the update command. Try without `sudo` first*\n\n### usage\n\n```\nusage: iotz \u003ccommand\u003e [options]\n```\n\nA quick start with an `Arduino` mxchip project\n\n```\niotz create arduino mxchip myproject\ncd myproject\niotz init\niotz compile\n```\n\nor a `Raspberry Pi` project\n\n```\niotz create raspberry hello\ncd hello\niotz init\niotz make\n```\n\nAlternatively, you might download an online Arduino, ARMmbed, Micropython, Raspberry Pi etc.\nsample and build it as we did with the tests / examples under [test/](test/)\n\nsee [extensions and how things work](extensions/README.md)\n\nThe documentation below, applies to all extensions. However, you may find some extension\nspecific details under their README. i.e. [arduino](extensions/arduino/README.md)\n[mbed](extensions/mbed/README.md) [raspberry](extensions/raspberry/README.md)\n\n### commands\n\n#### help\nDisplay available options\n\n#### version\nShow version (semver)\n\n#### update\nUpdate base container to latest (from Docker registry) and re-install extensions on top of it.\nIf there is a container associated with the current folder, delete that. (force update)\n\nYou may re-install `iotz` via `npm install -g iotz` to get latest changes. Post\ninstall process will automaticall call `update` command.\n\n#### clean\nDeletes the local container for the current path. Also, cleans up the auto\ngenerated files and folders.\n\n#### compile\nCompile the project on given path (may need an `iotz.json` on path)\n\n`compile` triggers a set of platform specific commands to build the project on the path.\nThus, it may require both `target` and `toolchain` are defined under `iotz.json` file.\n\nA successful `init` phase (see below) will ensure that you have `iotz.json` file in place.\n\n_Some platforms (extensions) do not require a particular target hence you won't see_\n_issue by not having an `iotz.json` file in place._\n\n#### connect\n`connect \u003cadditional args for docker\u003e`\n\nRuns the current container bash in an interactive mode (tty is enabled).\n`../\u003ccurrent path\u003e` is attached by default.\n\n#### create\n`create \u003ctoolchain name\u003e \u003cboard name\u003e \u003coptional project name\u003e`\n\nCreates an empty project for given `toolchain` and optinally `board`.\n\ni.e.\n```\niotz create arduino yun\n```\n\nThe command above will create a `sampleApplication.ino` file and `iotz.json` config\nfile on the current folder. If you give a project name as shown below;\n\n```\niotz create arduino yun new_project\n```\n\nThis will create a folder named `new_project` and put the code and config file under it.\n\n`\u003ctoolchain name\u003e` is the name of extension. i.e. `arduino`, `mbed`, `raspberry`...\nYou may find the `\u003cboard name\u003e`from [here](#where-can-i-find-the-target-board-names)\n\nOnce creation is done, you need to call `iotz init` on the target project folder\nto setup the specialized container.\n\n#### export\nExports a makefile (depends to extension)\n\n#### init\n`init \u003coptional target board name\u003e`\n\nInitialize a specialized container for current path.\n\n`iotz` initializes a specialized container per project. `init` phase is required\nfor specialization. `iotz` detects the extension required for the project\nduring this phase and installs as defined by the extension itself.\n\nBeware. If you have previously initialized `iotz` for a project (path), once you\ncall it again, it will clean up the previous initialization.\n\n#### run\n`run \u003ccmd\u003e \u003cargs\u003e`\n\nRuns the `\u003ccmd\u003e` on container's bash.\n\ni.e. `iotz run ls -l`\n\n#### apt / apt-get / pip / npm\nUse package managers. i.e. `apt-get install -y wget` would add `wget` into the current container.\n\n`iotz` runs on top of Docker containers. As a result, your scripts won't change the\ncontainer. i.e. `iotz run apt install -y wget` will work but once the execution is complete,\ncontainer will be back to its' original state. So, if you want to add packages into actual\nimage, use the commands `apt`, `apt-get`, `pip`, `npm` directly.\n\nP.S. Use `-y` with `apt` and `apt-get`\nP.S. `npm` is not available by default but once you install `node` package via `apt`, `npm` command will\nupdate the container image going forward.\n\n### predefined extensions\n```\n  arduino \u003cargs\u003e                           :  run arduino cli with given args\n  make \u003cargs\u003e                              :  run make command\n  mbed \u003cargs\u003e                              :  run mbed cli with given args\n  raspberry                                :  shows make, cmake, and gcc gnuhf versions\n  micropython\n```\n\n### other examples\n```\n  run:\n    iotz run ls -l\n  make:\n    iotz make\n  mbed:\n    iotz mbed target -S\n  arduino:\n    iotz arduino --install-boards AZ3166:stm32f4\n```\n\n### iotz.json file\n\nIntroducing a yet another project file is not desirable. Yet, a basic configuration\nis needed to keep toolchain user from repeating entries.\n\nA basic `iotz.json` file for mxchip AZ3166\n```\n{\n  \"toolchain\": \"arduino\",\n  \"target\": \"mxchip\",\n  \"filename\": \"sample.ino\"\n}\n```\n\nmbed nucleo l476rg with a lib\n```\n{\n  \"toolchain\": \"mbed\",\n  \"target\": \"nucleo_l476rg\",\n  \"deps\":\n  [\n    {\n      \"name\": \"NDefLib\",\n      \"url\" : \"https://developer.mbed.org/teams/ST/code/NDefLib/#31f727872290\"\n    }\n  ]\n}\n```\n\n*WARNING:* `deps` names are case sensitive (and optional)\n\n`toolchain`: name of the extension. i.e. `arduino` or `mbed` or anything else!\n\n`target`: target device name. see [board names](#where-can-i-find-the-target-board-names)\n\n`deps`: array of `{name, url}` pairs to defined dependencies\n\n`filename`: main source code filename.\n\n`mountConfig`: By default, iotz mounts from `../`. If depth of the current path is\n3 or more folders, iotz mounts from `../..`. This approach may not fit for all. So,\nyou may use `mountConfig` to define a _relative_ mount point manually. i.e. `\"mountConfig\": \"../build\"`\n\n_*_Depending to extension, you might have other required definitions._\n\n### F.A.Q\n\n#### How to update iotz?\n\n```\nnpm i -g iotz\n```\n\nOnce it's complete\n\n```\niotz update\n```\n\n*You may need `sudo` to run the update command. Try without `sudo` first*\n\n#### where can I find the target board names\n\n`iotz` doesn't control the extensions and what targets those extensions support.\nYou will find a basic info below. Please check extension's page for better coverage.\n\n`ARM mbed` target names are available from `https://os.mbed.com/`. Simply find\nyour board there. On the board page, you will find the `TARGET NAME` for that board.\n\n`Arduino` target names might be a bit more tricky to find but the list below\nshould help for starters;\n\n```\n  AZ3166 MXCHIP_AZ3166 - arduino yun - arduino uno - arduino diecimila\n  arduino nano - arduino mega - arduino megaADK - arduino leonardo - arduino leonardoeth\n  arduino micro - arduino esplora - arduino mini - arduino ethernet - arduino fio\n  arduino bt - arduino pro - arduino atmegang - arduino robotControl - arduino robotMotor\n  arduino gemma - arduino circuitplay32u4cat - arduino yunmini - arduino chiwawa - arduino one\n  arduino unowifi - esp8266 generic - esp8266 esp8285 - esp8266 espduino - esp8266 huzzah\n  esp8266 espresso_lite_v1 - esp8266 espresso_lite_v2 - esp8266 phoenix_v1 - esp8266 phoenix_v2 - esp8266 nodemcu\n  esp8266 nodemcuv2 - esp8266 modwifi - esp8266 thing - esp8266 thingdev - esp8266 esp210\n  esp8266 d1_mini - esp8266 d1_mini_pro - esp8266 d1_mini_lite - esp8266 d1 - esp8266 espino\n  esp8266 espinotee - esp8266 wifinfo - esp8266 arduino-esp8266 - esp8266 gen4iod - esp8266 oak\n```\n\n`iotz` arduino extension helps with the names. i.e. `iotz init arduino mxchip` is sufficient instead\nof `iotz init arduino MXCHIP_AZ3166`\n\n#### how your project folder structure should look like?\n\nSimilar to folder structure for ARMmbed or Arduino or other.. Keep it the same!\nIf you are just starting and don't have a particular structure, please visit\ntheir websites and see the sample projects.\n\nYou might also visit `test/` folder and see by yourself. Also, see `run.batch`\nfor the test commands.\n\n#### how containers are managed ?\n\n`iotz` creates a sub container that is tailored for your project and depend on\n`azureiot/iotz` container.\n\nIn order to benefit from docker caching, below naming is used.\n\n`aiot_iotz_` `folder_ino`\n\ni.e. `aiot_iotz_7396162`\n\nmore info is available [here](extensions/README.md)\n\n#### how should I clean up the containers ?\n\nTry pruning! -\u003e https://docs.docker.com/config/pruning/\n\n#### unable to find `mbed` or `arduino` or `arm-linux-gnueabihf-g++` ....\n\nUpdate might possibly fix it.\n\nTry `iotz update` and / or `iotz clean`\n\n#### open preproc/ctags_target_for_gcc_minus_e.cpp: no such file or directory\n\nTry `iotz clean` and then compile again\n\n### roadmap\n\nSee active list of [features](https://github.com/Azure/iotz/issues?q=is%3Aissue+is%3Aopen+label%3Afeature) under development.\n\n### contributing\n\nPlease test the changes and code style (eslint) prior to sending a PR. (Running the tests may take some serious amount of time and your network traffic.)\n\n```\ncd test \u0026\u0026 node runtests.js\n```\n\n\n### LICENSE\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fobastemur%2Fiotz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fobastemur%2Fiotz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fobastemur%2Fiotz/lists"}