{"id":48769011,"url":"https://github.com/l5yth/ardulinux","last_synced_at":"2026-04-13T09:30:52.808Z","repository":{"id":344805849,"uuid":"1183182328","full_name":"l5yth/ardulinux","owner":"l5yth","description":"Arduino API for use on Linux devices","archived":false,"fork":false,"pushed_at":"2026-03-16T22:30:43.000Z","size":585,"stargazers_count":1,"open_issues_count":6,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-16T23:56:31.853Z","etag":null,"topics":["arduino","linux","rapsberry-pi"],"latest_commit_sha":null,"homepage":"","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/l5yth.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-16T11:00:27.000Z","updated_at":"2026-03-16T21:09:08.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/l5yth/ardulinux","commit_stats":null,"previous_names":["l5yth/meshduino"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/l5yth/ardulinux","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/l5yth%2Fardulinux","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/l5yth%2Fardulinux/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/l5yth%2Fardulinux/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/l5yth%2Fardulinux/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/l5yth","download_url":"https://codeload.github.com/l5yth/ardulinux/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/l5yth%2Fardulinux/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31746287,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T09:16:15.125Z","status":"ssl_error","status_checked_at":"2026-04-13T09:16:05.023Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["arduino","linux","rapsberry-pi"],"created_at":"2026-04-13T09:30:52.057Z","updated_at":"2026-04-13T09:30:52.802Z","avatar_url":"https://github.com/l5yth.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ArduLinux\n\n[![Build](https://github.com/l5yth/ardulinux/actions/workflows/build.yml/badge.svg)](https://github.com/l5yth/ardulinux/actions/workflows/build.yml)\n[![Coverage](https://codecov.io/gh/l5yth/ardulinux/branch/main/graph/badge.svg)](https://codecov.io/gh/l5yth/ardulinux)\n\nArduLinux is a continuation of [portduino](https://github.com/geeksville/framework-portduino) and implements the Arduino API as a Linux user-space library, allowing firmware written for embedded targets (nRF52, ESP32, AVR, etc.) to build and run on Linux without modification. Applications get access to real hardware - GPIO via libgpiod, SPI via spidev, I2C via i2c-dev, Serial via POSIX file descriptors - or fully simulated devices for CI and development.\n\n## Differences from portduino framework\n\nArduLinux is a clean-room continuation, not a fork. The key differences:\n\n- **No vendored dependencies**: [ArduinoCore-API](https://github.com/arduino/ArduinoCore-API) and [WiFi](https://github.com/arduino-libraries/WiFi) are upstream git submodules, not copied or patched source trees.\n- **Self-contained PlatformIO platform**: ships its own `platform.json` and SCons builder; no separate platform-native dependency or private package mirror required.\n- **Smaller surface area**: dead code, unused variants, and IDE project files removed.\n\n## Using as a platform (PlatformIO)\n\nAdd to your `platformio.ini`:\n\n```ini\n[env:ardulinux]\nplatform = git+https://github.com/l5yth/ardulinux.git\nframework = arduino\nboard = ardulinux\n```\n\nlibgpiod and libi2c are detected automatically via `pkg-config` — no extra flags required. Without libgpiod the build falls back to simulated GPIO and I2C, which works without any hardware.\n\n## Building standalone (CMake)\n\nRequires GCC or Clang (C++14), CMake 3.17+, and pkg-config. libgpiod and libi2c are optional; without them the build uses simulated devices.\n\nOn Debian/Ubuntu:\n```sh\nsudo apt-get install build-essential cmake libgpiod-dev libi2c-dev pkg-config\n```\n\nOn Arch:\n```sh\nsudo pacman -S base-devel cmake libgpiod i2c-tools pkg-config\n```\n\n```sh\ncmake -B build\ncmake --build build\n```\n\n## Writing an application\n\nImplement the standard Arduino `setup()` and `loop()` functions. Optionally define `ardulinuxSetup()` to bind real hardware before `setup()` runs:\n\n```cpp\n#include \"Arduino.h\"\n#include \"linux/gpio/LinuxGPIOPin.h\"\n\nvoid ardulinuxSetup() {\n    // Bind pin 7 to GPIO chip \"gpiochip0\", line \"PIN_7\"\n    gpioBind(new LinuxGPIOPin(7, \"gpiochip0\", \"PIN_7\"));\n}\n\nvoid setup() {\n    pinMode(7, OUTPUT);\n}\n\nvoid loop() {\n    digitalWrite(7, !digitalRead(7));\n    delay(500);\n}\n```\n\nWithout `ardulinuxSetup()`, all pins default to simulated. The VFS is mounted at `~/.ardulinux/default/` by default; pass `--fsdir \u003cpath\u003e` to override or `--erase` to wipe it on startup.\n\n## License\n\nLGPL 2.1 - see [LICENSE](LICENSE).\n\n* Copyright (c) 2011-19 Arduino LLC.\n* Copyright (c) 2020-23 Geeksville Industries, LLC\n* Copyright (c) 2024-26 jp-bennett\n* Copyright (c) 2026-27 l5yth\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fl5yth%2Fardulinux","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fl5yth%2Fardulinux","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fl5yth%2Fardulinux/lists"}