{"id":14961850,"url":"https://github.com/arduino/arduinocore-api","last_synced_at":"2025-04-09T05:12:47.164Z","repository":{"id":34436549,"uuid":"54213498","full_name":"arduino/ArduinoCore-API","owner":"arduino","description":"Hardware independent layer of the Arduino cores defining the official API","archived":false,"fork":false,"pushed_at":"2024-09-20T07:59:17.000Z","size":608,"stargazers_count":238,"open_issues_count":123,"forks_count":130,"subscribers_count":38,"default_branch":"master","last_synced_at":"2025-04-09T05:12:40.331Z","etag":null,"topics":["api","arduino"],"latest_commit_sha":null,"homepage":"https://www.arduino.cc/reference/en/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arduino.png","metadata":{"funding":{"github":["arduino"],"custom":"https://www.arduino.cc/en/Main/Donate"},"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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-03-18T15:52:10.000Z","updated_at":"2025-04-04T03:49:46.000Z","dependencies_parsed_at":"2024-01-23T10:05:29.866Z","dependency_job_id":"a6386b7f-426a-41b0-b24d-d46e2884593b","html_url":"https://github.com/arduino/ArduinoCore-API","commit_stats":{"total_commits":293,"total_committers":41,"mean_commits":7.146341463414634,"dds":0.6996587030716723,"last_synced_commit":"4a02bfc0a924e1fec34c3bb82ffd5dfba7643a0c"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arduino%2FArduinoCore-API","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arduino%2FArduinoCore-API/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arduino%2FArduinoCore-API/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arduino%2FArduinoCore-API/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arduino","download_url":"https://codeload.github.com/arduino/ArduinoCore-API/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247980844,"owners_count":21027808,"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","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":["api","arduino"],"created_at":"2024-09-24T13:27:56.974Z","updated_at":"2025-04-09T05:12:47.137Z","avatar_url":"https://github.com/arduino.png","language":"C++","funding_links":["https://github.com/sponsors/arduino","https://www.arduino.cc/en/Main/Donate"],"categories":[],"sub_categories":[],"readme":"# ArduinoCore-API\n\n[![Unit Tests](https://github.com/arduino/ArduinoCore-API/workflows/Unit%20Tests/badge.svg)](https://github.com/arduino/ArduinoCore-API/actions?workflow=Unit+Tests)\n[![codecov](https://codecov.io/gh/arduino/ArduinoCore-API/branch/master/graph/badge.svg)](https://codecov.io/gh/arduino/ArduinoCore-API)\n[![Spell Check status](https://github.com/arduino/ArduinoCore-API/actions/workflows/spell-check.yml/badge.svg)](https://github.com/arduino/ArduinoCore-API/actions/workflows/spell-check.yml)\n\nThis repository hosts the hardware independent layer of Arduino core. In other words it contains the abstract definition of the Arduino core API, consisting of hardware-independent header files that are then included and implemented by the various platform-specific cores.\n\nHaving a single place where the Arduino API is defined means that there is no longer a String implementation within every Arduino core (a String module within ArduinoCore-avr, a String module within ArduinoCore-samd, a String module within ArduinoCore-megaavr …) but rather one String implementation within ArduinoCore-API which all other cores utilise. This has the pleasant side effects that bugs fixed or features added within the ArduinoCore-API String implementation are automatically propagated to all cores utilizing ArduinoCore-API.\n\nAs of now, the following official cores are utilising ArduinoCore-API:\n\n* [megaavr](https://github.com/arduino/ArduinoCore-megaAVR)\n* [mbed](https://github.com/arduino/ArduinoCore-mbed)\n* [samd](https://github.com/arduino/ArduinoCore-samd)\n* [renesas](https://github.com/arduino/ArduinoCore-renesas)\n\nThere's an ongoing effort to port the others, while maintainers of third-party cores are strongly invited to follow the same route in order to stay up-to-date with the new language features. For backwards compatibility, every revision of this repo will increase the `ARDUINO_API_VERSION` define.\n\n## Documentation\n\nThe Arduino API is documented in the official [language reference](https://www.arduino.cc/reference/en/), whose sources are located in [this repository](https://github.com/arduino/reference-en) and are open to contributions from the community.\n\n## Support\n\nThis repository is not directly usable by final users. If you need assistance with Arduino, see the [Help Center](https://support.arduino.cc/) and browse the [forum](https://forum.arduino.cc).\n\n## Development\n\n### Bugs \u0026 Issues\n\nIf you want to report an issue with this core, you can submit it to the [issue tracker](https://github.com/arduino/ArduinoCore-API/issues) of this repository. Some rules apply:\n\n* If your issue is about a specific hardware platform, report it to its repository. This one is only about discussing the generic API.\n* Before posting, please check if the same problem has been already reported by someone else to avoid duplicates.\n* Remember to include as much detail as you can about your hardware set-up, code and steps for reproducing the issue. Make sure you're using an original Arduino board.\n\n### Contributions\n\nContributions are always welcome! You can submit them directly to this repository as Pull Requests. Please provide a detailed description of the problem you're trying to solve. We also appreciate any help in testing issues and patches contributed by other users.\n\n### Unit testing\n\nThis repository includes a test suite that covers most of the API and that is designed to run on generic hardware, thus not requiring a development board. We call this _host-based unit-testing_. In order to test the features that are only defined but not implemented in this repository, mock implementations are included.\n\nPlease help us improve the coverage of the test suite!\n\n#### To build and run unit tests\n\nThe unit tests are automatically built by GitHub as part of pull request checks (in `.github/workflows/unit-tests.yml`).\n\nTo build and run locally:\n\n**Dependencies**\n\n* [CMake](https://cmake.org/)\n* [GCC](https://gcc.gnu.org/)\n\nOn (Ubuntu) Linux run:\n\n```bash\nsudo apt-get install build-essential cmake\n```\n\nFrom the project root:\n\n```bash\ncd test \u0026\u0026 mkdir build \u0026\u0026 cd build\ncmake ..\nmake \u0026\u0026 bin/test-ArduinoCore-API\n```\n\n### Implementing ArduinoCore-API\n\nIn order to compile a core which is implementing ArduinoCore-API you'll need to copy/symlink the `api` directory to the target's `cores/arduino` directory as part of your development and release workflow. The most elegant and effective solution is to develop your core with `api` symlinked and produce the distributable archive by telling `tar` to follow symlinks. Example:\n\n```bash\ntar --exclude='*.git*' -cjhvf $yourcore-$version.tar.bz2 $yourcore/\n```\n\nThe API is coded to the C++11 standard and the core's compiler must be able to support that version of the language.\n\nDocumentation for how to integrate with a Arduino core (which is necessary if you do not download the Arduino core via the Boards Manager) can be found here:\n* [ArduinoCore-megaavr](https://github.com/arduino/ArduinoCore-megaavr#developing)\n* [ArduinoCore-mbed](https://github.com/arduino/ArduinoCore-mbed#clone-the-repository-in-sketchbookhardwarearduino-git)\n* [ArduinoCore-samd](https://github.com/arduino/ArduinoCore-samd/#developing)\n\n## Donations\n\nThis open source code is maintained by Arduino with the help of the community. We invest a considerable amount of time in testing code, optimizing it and introducing new features. Please consider [donating](https://www.arduino.cc/en/donate/) or [sponsoring](https://github.com/sponsors/arduino) to support our work, as well as [buying original Arduino boards](https://store.arduino.cc) which is the best way to make sure our effort can continue in the long term.\n\n## License and credits\n\nThis code is licensed under the terms of the GNU LGPL 2.1. If you have questions about licensing please contact us at [license@arduino.cc](mailto:license@arduino.cc).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farduino%2Farduinocore-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farduino%2Farduinocore-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farduino%2Farduinocore-api/lists"}