{"id":42728650,"url":"https://github.com/memfault/memfault-firmware-sdk","last_synced_at":"2026-04-02T12:06:27.686Z","repository":{"id":38715480,"uuid":"193568549","full_name":"memfault/memfault-firmware-sdk","owner":"memfault","description":"Memfault SDK for embedded systems. Observability, logging, crash reporting, and OTA all in one service. More information at https://docs.memfault.com.","archived":false,"fork":false,"pushed_at":"2026-03-24T20:28:21.000Z","size":4413,"stargazers_count":212,"open_issues_count":7,"forks_count":95,"subscribers_count":28,"default_branch":"master","last_synced_at":"2026-03-26T01:47:40.966Z","etag":null,"topics":["c","embedded","firmware","fota","memfault","observability","ota","rtos","sdk"],"latest_commit_sha":null,"homepage":"https://memfault.com","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/memfault.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2019-06-24T19:44:20.000Z","updated_at":"2026-03-25T19:35:19.000Z","dependencies_parsed_at":"2023-02-17T12:15:29.855Z","dependency_job_id":"289d52b5-6dd3-4af5-b5b7-80a1b9e1658f","html_url":"https://github.com/memfault/memfault-firmware-sdk","commit_stats":{"total_commits":128,"total_committers":3,"mean_commits":"42.666666666666664","dds":0.015625,"last_synced_commit":"a04d9302ae4938b2a5a061ba7c1a1ed17d111ca6"},"previous_names":[],"tags_count":215,"template":false,"template_full_name":null,"purl":"pkg:github/memfault/memfault-firmware-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memfault%2Fmemfault-firmware-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memfault%2Fmemfault-firmware-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memfault%2Fmemfault-firmware-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memfault%2Fmemfault-firmware-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/memfault","download_url":"https://codeload.github.com/memfault/memfault-firmware-sdk/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memfault%2Fmemfault-firmware-sdk/sbom","scorecard":{"id":636196,"data":{"date":"2025-08-11","repo":{"name":"github.com/memfault/memfault-firmware-sdk","commit":"60e9ab93eb70d237a61b7f5a1d1572118f7342d7"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.1,"checks":[{"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":"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":"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":"Maintained","score":4,"reason":"5 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"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":"Binary-Artifacts","score":0,"reason":"binaries present in source code","details":["Warn: binary detected: scripts/mflt-build-id/tests_mflt_build_id/elf_fixtures/crc32_build_id_populated.elf:1","Warn: binary detected: scripts/mflt-build-id/tests_mflt_build_id/elf_fixtures/crc32_build_id_unpopulated.elf:1","Warn: binary detected: scripts/mflt-build-id/tests_mflt_build_id/elf_fixtures/gnu_id_present_and_not_used.elf:1","Warn: binary detected: scripts/mflt-build-id/tests_mflt_build_id/elf_fixtures/gnu_id_present_and_used.elf:1","Warn: binary detected: scripts/mflt-build-id/tests_mflt_build_id/elf_fixtures/gnu_id_with_short_len.elf:1","Warn: binary detected: scripts/mflt-build-id/tests_mflt_build_id/elf_fixtures/memfault_build_id_present_and_populated.elf:1","Warn: binary detected: scripts/mflt-build-id/tests_mflt_build_id/elf_fixtures/memfault_build_id_present_and_unpopulated.elf:1","Warn: binary detected: scripts/mflt-build-id/tests_mflt_build_id/elf_fixtures/memfault_build_id_with_short_len.elf:1","Warn: binary detected: scripts/mflt-build-id/tests_mflt_build_id/elf_fixtures/memfault_id_used_gnu_id_present.elf:1","Warn: binary detected: scripts/mflt-build-id/tests_mflt_build_id/elf_fixtures/no_memfault_symbols.elf:1","Warn: binary detected: scripts/mflt-build-id/tests_mflt_build_id/elf_fixtures/no_symtab_no_text_no_data.elf: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":"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":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: .circleci/Dockerfile:12: pin your Docker image by updating ubuntu:22.04 to ubuntu:22.04@sha256:1aa979d85661c488ce030ac292876cf6ed04535d3a237e49f61542d8e5de5ae0","Info:   0 out of   1 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":"Branch-Protection","score":3,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'master'","Info: 'force pushes' disabled on branch 'master'","Warn: 'branch protection settings apply to administrators' is disabled on branch 'master'","Warn: branch 'master' does not require approvers","Warn: codeowners review is not required on branch 'master'","Warn: no status checks found to merge onto branch 'master'","Warn: PRs are not required to make changes on branch 'master'; or we don't have data to detect it.If you think it might be the latter, make sure to run Scorecard with a PAT or use Repo Rules (that are always public) instead of Branch Protection settings"],"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":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 1.28.0 not signed: https://api.github.com/repos/memfault/memfault-firmware-sdk/releases/237022935","Warn: release artifact 1.27.0 not signed: https://api.github.com/repos/memfault/memfault-firmware-sdk/releases/233995497","Warn: release artifact 1.26.1 not signed: https://api.github.com/repos/memfault/memfault-firmware-sdk/releases/228798548","Warn: release artifact 1.26.0 not signed: https://api.github.com/repos/memfault/memfault-firmware-sdk/releases/228126253","Warn: release artifact 1.25.0 not signed: https://api.github.com/repos/memfault/memfault-firmware-sdk/releases/224341959","Warn: release artifact 1.28.0 does not have provenance: https://api.github.com/repos/memfault/memfault-firmware-sdk/releases/237022935","Warn: release artifact 1.27.0 does not have provenance: https://api.github.com/repos/memfault/memfault-firmware-sdk/releases/233995497","Warn: release artifact 1.26.1 does not have provenance: https://api.github.com/repos/memfault/memfault-firmware-sdk/releases/228798548","Warn: release artifact 1.26.0 does not have provenance: https://api.github.com/repos/memfault/memfault-firmware-sdk/releases/228126253","Warn: release artifact 1.25.0 does not have provenance: https://api.github.com/repos/memfault/memfault-firmware-sdk/releases/224341959"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"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-21T09:13:48.469Z","repository_id":38715480,"created_at":"2025-08-21T09:13:48.469Z","updated_at":"2025-08-21T09:13:48.469Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31305973,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T09:48:21.550Z","status":"ssl_error","status_checked_at":"2026-04-02T09:48:19.196Z","response_time":89,"last_error":"SSL_read: 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":["c","embedded","firmware","fota","memfault","observability","ota","rtos","sdk"],"created_at":"2026-01-29T17:02:11.466Z","updated_at":"2026-04-02T12:06:27.674Z","avatar_url":"https://github.com/memfault.png","language":"C","funding_links":[],"categories":["sdk"],"sub_categories":[],"readme":"# Memfault Firmware SDK\n\n[![CircleCI](https://circleci.com/gh/memfault/memfault-firmware-sdk.svg?style=svg)](https://circleci.com/gh/memfault/memfault-firmware-sdk)\n[![Coverage](https://img.shields.io/codecov/c/gh/memfault/memfault-firmware-sdk/master)](https://codecov.io/gh/memfault/memfault-firmware-sdk/)\n\nShip Firmware with Confidence.\n\nMore details about the Memfault platform itself, how it works, and step-by-step\nintegration guides\n[can be found here](https://mflt.io/embedded-getting-started).\n\n## Getting Started\n\nTo start integrating in your platform today,\n[create a Memfault cloud account](https://mflt.io/signup).\n\n## Components\n\nThe SDK is designed as a collection of components, so you can include only what\nis needed for your project. The SDK has been designed to have minimal impact on\ncode-space, bandwidth, and power consumption.\n\nThe [`components`](components/) directory folder contains the various components\nof the SDK. Each component contains a `README.md`, source code, header files and\n\"platform\" header files.\n\nThe platform header files describe the interfaces which the component relies on\nthat you must implement.\n\nFor some of the platform dependencies we have provided ports that can be linked\ninto your system directly, or used as a template for further customization. You\ncan find them in the [`ports`](ports/) folder.\n\nFor some of the popular MCUs \u0026 vendor SDKs, we have already provided a reference\nimplementation for platform dependencies which can be found in the\n[`examples`](examples/) folder. These can also serve as a good example when\ninitially setting up the SDK on your platform.\n\n### Main components\n\n- `panics` – fault handling, coredump and reboot tracking and reboot loop\n  detection API.\n- `metrics` - used to monitor device health over time (i.e. connectivity,\n  battery life, MCU resource utilization, hardware degradation, etc.)\n\nPlease refer to the `README.md` in each of these for more details.\n\n### Support components\n\n- `core` – common code that is used by all other components.\n- `demo` - common code that is used by demo apps for the various platforms.\n- `http` – http client API, to post coredumps and events directly to the\n  Memfault service from devices.\n- `util` – various utilities.\n\n## Integrating the Memfault SDK\n\n## Add Memfault SDK to Your Repository\n\nThe Memfault SDK can be added directly into your repository. The structure\ntypically looks like:\n\n```bash\n\u003cYOUR_PROJECT\u003e\n├── third_party/memfault\n│               ├── memfault-firmware-sdk (submodule)\n│               │\n│               │ # Files where port to your platform will be implemented\n│               ├── memfault_platform_port.c\n│               ├── memfault_platform_coredump_regions.c\n│               │\n│               │ # Configuration headers\n│               ├── memfault_platform_config.h\n│               ├── memfault_trace_reason_user_config.def\n│               ├── memfault_metrics_heartbeat_config.def\n│               └── memfault_platform_log_config.h\n```\n\nIf you are using `git`, the Memfault SDK is typically added to a project as a\nsubmodule:\n\n```bash\ngit submodule add https://github.com/memfault/memfault-firmware-sdk.git $YOUR_PROJECT/third_party/memfault/memfault-firmware-sdk\n```\n\nThis makes it easy to track the history of the Memfault SDK. You should not need\nto make modifications to the Memfault SDK. The typical update flow is:\n\n- `git pull` the latest upstream\n- check [CHANGELOG.md](CHANGELOG.md) to see if any modifications are needed\n- update to the new submodule commit in your repo.\n\nAlternatively, the Memfault SDK may be added to a project as a git subtree or by\ncopying the source into a project.\n\n## Add sources to Build System\n\n### Make\n\nIf you are using `make`, `makefiles/MemfaultWorker.mk` can be used to very\neasily collect the source files and include paths required by the SDK.\n\n```c\nMEMFAULT_SDK_ROOT := \u003cThe to the root of this repo from your project\u003e\nMEMFAULT_COMPONENTS := \u003cThe SDK components to be used, i.e \"core util\"\u003e\ninclude $(MEMFAULT_SDK_ROOT)/makefiles/MemfaultWorker.mk\n\u003cYOUR_SRC_FILES\u003e += $(MEMFAULT_COMPONENTS_SRCS)\n\u003cYOUR_INCLUDE_PATHS\u003e += $(MEMFAULT_COMPONENTS_INC_FOLDERS)\n```\n\n### Cmake\n\nIf you are using `cmake`, `cmake/Memfault.cmake` in a similar fashion to\ncollection source files and include paths:\n\n```c\nset(MEMFAULT_SDK_ROOT \u003cThe path to the root of the memfault-firmware-sdk repo\u003e)\nlist(APPEND MEMFAULT_COMPONENTS \u003cThe SDK components to be used, i.e \"core util\"\u003e)\ninclude(${MEMFAULT_SDK_ROOT}/cmake/Memfault.cmake)\nmemfault_library(${MEMFAULT_SDK_ROOT} MEMFAULT_COMPONENTS\n MEMFAULT_COMPONENTS_SRCS MEMFAULT_COMPONENTS_INC_FOLDERS)\n\n# ${MEMFAULT_COMPONENTS_SRCS} contains the sources\n# needed for the library and ${MEMFAULT_COMPONENTS_INC_FOLDERS} contains the include paths\n```\n\n### Other Build Systems\n\nIf you are not using one of the above build systems, to include the SDK you need\nto do is:\n\n- Add the `.c` files located at `components/\u003ccomponent\u003e/src/*.c` to your build\n  system\n- Add `components/\u003ccomponent\u003e/include` to the include paths you pass to the\n  compiler\n\n#### Running the unit tests\n\nThe SDK code is covered extensively by unit tests. They can be found in the\n`tests/` folder. If you'd like to run them yourself, check out the instructions\nin [tests/README.md](tests/README.md).\n\nTo learn more about unit testing best practices for firmware development, check\nout\n[our blog post on this topic](https://interrupt.memfault.com/blog/unit-testing-basics)!\n\nThe unit tests are run by CircleCI upon every commit to this repo. See badges at\nthe top for build \u0026 test coverage status of the `master` branch.\n\n## FAQ\n\n- Why does a coredump not show up under \"Issues\" after uploading it?\n\n  - Make sure to upload the symbols to the same project to which you upload\n    coredumps. Also make sure the software type and software version reported by\n    the device (see \"Device information\" in `components/core/README.md`) match\n    the software type and software version that was entered when creating the\n    Software Version and symbol artifact online.\n    [More information on Build Ids and uploading Symbol Files can be found here](https://mflt.io/symbol-file-build-ids).\n\n- I'm getting error XYZ, what to do now?\n\n  - Don't hesitate to contact us for help! You can reach us through\n    \u003chttps://mflt.io/contact-support\u003e.\n\n## License\n\nUnless specifically indicated otherwise in a file, all memfault-firmware-sdk\nfiles are all licensed under the [Memfault License](/LICENSE). (A few files in\nthe [examples](/examples) and [ports](/ports) directory are licensed differently\nbased on vendor requirements.)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmemfault%2Fmemfault-firmware-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmemfault%2Fmemfault-firmware-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmemfault%2Fmemfault-firmware-sdk/lists"}