Local-first firmware footprint intelligence for embedded engineering teams.
Project description
MemScope
Local-first firmware footprint intelligence for embedded teams.
MemScope analyzes your ELF, MAP, and linker artifacts to give you a clear picture of where your firmware's flash and RAM are going — and gates your CI build when a regression sneaks in. Built for embedded engineers who want SonarQube-style enforcement without sending build artifacts to a cloud.
pip install memscope-fw
License at a glance. MemScope is free — the
memscope-fwdistribution on PyPI is gratis for any use, including commercial use by companies of any size. No license key, no watermark, no time limit, no seat count, no procurement required. Runanalyze,validate,diff, and--strictCI gating today, indefinitely. Optional commercial Bundles (PR/Slack notifications, SoC-family analysis extras, ISO 26262 / IEC 62304 / DO-178C compliance evidence packages, custom bespoke extensions) extend the tool for paying customers — those are delivered as Customer-Bound Wheels separately from the free PyPI core. Bundle licences are not yet for sale — the commercial entity is still being registered. Closed-source proprietary EULA — not OSI / FSF open source. Full text: LICENSE.
What it does
- Inspects ELF + MAP + linker scripts and reconstructs the per-region, per-section, per-symbol, per-component memory layout — everything that's actually placed in your firmware image and what each part costs.
- Reports in three forms from a single run: a compact terminal summary for CI logs, a versioned JSON for scripts and dashboards, and a self-contained interactive HTML for engineers to explore.
- Gates CI builds when a budget is busted, a region overflows, or a baseline diff exceeds your threshold — fail-fast with deterministic exit codes.
- Compares two builds side-by-side via
memscope diff, showing top regressions and reductions across regions, sections, symbols, and components. - Runs entirely offline. The free core makes no network calls. No build artifacts ever leave your machine. No cloud backend.
Why teams pick MemScope over rolling their own scripts
| Capability | Hand-rolled scripts | MemScope |
|---|---|---|
| Parse ELF + MAP + linker config consistently across toolchains | Different per project | One CLI, GNU + IAR + Keil + Clang/LLD all supported (dedicated parsers per toolchain, normalized to a single internal model) |
| Stable JSON schema your CI can rely on | Brittle | Versioned + validate subcommand |
| Drop-in CMake integration | DIY | cmake/FirmwareFootprint.cmake |
| Interactive HTML report for design reviews | None | Self-contained, no internet needed to open |
| CI gating with friendly error messages | grep + bash | --strict exit codes |
| Multi-core / multi-region partition awareness | Usually missing | First-class |
Install
pip install memscope-fw
Requires Python ≥ 3.11. Wheels are published per-platform for Windows (x86_64) + Linux (manylinux2014, x86_64) + macOS (Apple Silicon / arm64), each on Python 3.11 / 3.12 / 3.13 / 3.14.
5-minute quick start
# 1. Analyze a single build — produces report.html you can open in any browser
memscope analyze \
--elf path/to/firmware.elf \
--map path/to/firmware.map \
--linker path/to/linker.ld \
--json report.json \
--html report.html
# 2. Compare two builds (e.g. before/after a refactor)
memscope diff \
--current-json report.json \
--baseline-json baseline.json \
--html diff.html
# 3. Gate CI on a regression budget (exits non-zero if violated)
memscope analyze --strict \
--elf firmware.elf --map firmware.map --linker linker.ld \
--baseline-json baseline.json
The HTML report is fully self-contained — D3, ECharts, and all interactive visualizations are bundled inline, so it works in air-gapped CI environments and can be archived as a single file.
What's free vs what's paid
Free for everyone, forever (the memscope-fw distribution on PyPI):
analyze— full ELF/MAP/linker analysis, all reportsvalidate— JSON-schema sanity check, ideal as a CI-pipeline wedgediff— baseline comparison + interactive visualization--strictexit codes for CI gating- Custom
[budgets]/[policies]/[suppressions]config sections - CSV export
- HTML report with full Memory Layout Explorer
- All current and future toolchain parsers (GNU, Keil, Clang/LLD, etc.)
Paid commercial Bundles (delivered as Customer-Bound Wheels, separately from PyPI):
- PR / Slack / email notifications — auto-post footprint diffs as comments on GitHub / GitLab / Bitbucket pull requests. Subscription Bundle.
- SoC-family analysis extras — STM32 dual-core partition awareness, NXP S32K safety regions, Nordic SoftDevice handling, ESP32 IRAM/DRAM/PSRAM separation, etc. Subscription Bundle.
- Compliance evidence Bundles — ISO 26262 TCL evidence, IEC 62304 SOUP qualification, DO-178C tool qualification kit. One-Time fee + optional annual maintenance.
- Custom toolchain support — IAR, Renesas RX/RH850, Microchip MPLAB, custom proprietary linker formats. One-Time engineering contract.
- Bespoke per-customer features — internal symbol-renaming preprocessor support, custom HTML branding, internal-format adapters. One-Time engineering contract.
Bundle availability. Bundle licences are not yet on sale. The commercial entity that will issue them is being registered; until then, only the free core is operational and there is nothing to purchase. To be notified when Bundles become available, email dumitrescu.adrian121@gmail.com.
Documentation
Public documentation (CLI reference, CMake integration, CI tutorial, report interpretation guide, config schema, troubleshooting, privacy & GDPR posture, enterprise procurement Q&A) ships in docs/public/ and is also published at https://adrian-dumitrescu.github.io/memscope-docs/.
A condensed walkthrough is available via:
memscope --help # top-level commands
memscope analyze --help # per-command reference
Every subcommand has built-in --help documentation.
Privacy posture
- The free core makes no network calls of any kind. Your ELF / MAP files never leave your machine.
- Optional Subscription Bundles (when purchased) contact the licensing backend (Keygen.sh) on first activation and on a periodic refresh interval, transmitting only the License Key, a machine fingerprint hash, and the Bundle version. No analysis content is ever transmitted.
- Opt-in telemetry is OFF by default; if enabled in
memscope.toml, the User specifies the recipient endpoint — the Licensor neither receives nor stores telemetry. - Full privacy policy:
docs/public/privacy.md.
Support
For Bundle inquiries, custom engineering engagements, bug reports in the free core, and integration help:
When reporting an issue, please include the output of memscope diagnostics export — it bundles version, environment, and parser diagnostics into a single ZIP that's safe to attach.
License
Closed-source proprietary EULA — see LICENSE for the binding text and a Plain-English summary at the top.
In short:
- Free core (the PyPI distribution) is gratis for any use, including commercial use inside a company. No license key, no seat count, no time limit, no payment, no contact with the maintainer required.
- Optional commercial Bundles are delivered as Customer-Bound Wheels separately from PyPI, under either Subscription, One-Time, or Bespoke licensing models. Not yet generally available for sale — register interest at dumitrescu.adrian121@gmail.com.
- Not open source. No rights are granted under any OSI-approved or FSF-recognised license. Source code is not distributed; you receive the binary wheel published on PyPI.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file memscope_fw-0.2.0a5.tar.gz.
File metadata
- Download URL: memscope_fw-0.2.0a5.tar.gz
- Upload date:
- Size: 687.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ed6002c97e7a67341478a4175612ff0efd7dda3ac0fd814618a0d8f0939fd10
|
|
| MD5 |
d27304c151c37d8804c72a1293979cf7
|
|
| BLAKE2b-256 |
55bd15b3a6f1524dfb22df18db99e4d6bf693b47ea28370c08b83f21f3820e02
|
File details
Details for the file memscope_fw-0.2.0a5-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: memscope_fw-0.2.0a5-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 2.3 MB
- Tags: CPython 3.14, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
326edeb6327d239be498bc42a09006e2a64c8b3c4c81622b1387dfa422a15c02
|
|
| MD5 |
0c36f36a7a5c1713ea441a2999426511
|
|
| BLAKE2b-256 |
d2cb063c8c0449b92cd200a90ff108e4978a6f20639e4d528dd6f48af2c8f0a0
|
File details
Details for the file memscope_fw-0.2.0a5-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.
File metadata
- Download URL: memscope_fw-0.2.0a5-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.14, manylinux: glibc 2.28+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a21cfb15f0d9c866aee804ca321e5281856ed4e6fe608a93dde5774c3cd26583
|
|
| MD5 |
270ceafdd92d013c509f932975bcc282
|
|
| BLAKE2b-256 |
f37df9b06bcdac10783e843c3514829ee027bcaaa97f4ebc5c54c75e984c9246
|
File details
Details for the file memscope_fw-0.2.0a5-cp314-cp314-macosx_11_0_arm64.whl.
File metadata
- Download URL: memscope_fw-0.2.0a5-cp314-cp314-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.14, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b2d0dd71643d7d693365bcd25a36394eb81a492be3bfc7397594b9db3f290793
|
|
| MD5 |
cbd8141d3a689145443e3d2a570c635f
|
|
| BLAKE2b-256 |
4cb3d9eb1965a82b7fec83ad97ad2e13943054a9522302164a9cfbf3040da1a3
|
File details
Details for the file memscope_fw-0.2.0a5-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: memscope_fw-0.2.0a5-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 2.3 MB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
59961fdd2a2923e666400aa923b2382c69f61e7907ea6a43a06f64da6bdf42ff
|
|
| MD5 |
479ed4a13d32c0bb9f1eece28b7e20f3
|
|
| BLAKE2b-256 |
cf95b7aa4cec4418ab93d7df222c2665055a27d1a57dbd98cdc1c1f0fe5381f0
|
File details
Details for the file memscope_fw-0.2.0a5-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.
File metadata
- Download URL: memscope_fw-0.2.0a5-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.13, manylinux: glibc 2.28+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8951e9dd5e825bf15dd24c5bda1e2a16190ae0748f3816764580460041782ebc
|
|
| MD5 |
8fc5b8038a732ec2cd06c1d812b4a953
|
|
| BLAKE2b-256 |
a1f87c19a1d0431d5c6cd0e00bd80bd1d2e73bac7e7105a0d6e610928a92f04f
|
File details
Details for the file memscope_fw-0.2.0a5-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: memscope_fw-0.2.0a5-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ebb327b09af5fe3ac53368ef0893e53fb357c9f3ba7209607d9ec8fbcf6f723a
|
|
| MD5 |
39a94391ee6d80418d2fd653d5d1761f
|
|
| BLAKE2b-256 |
716c7e626f50874562e5b5eab4315239b6533293d9e2f80a8589ddc90e73fdd5
|
File details
Details for the file memscope_fw-0.2.0a5-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: memscope_fw-0.2.0a5-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 2.3 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a8b9e1d66a7693ab285f5eafa0849ec2a9831a6a2192994df8603ab9ce042ff9
|
|
| MD5 |
ac5e6fe2cf7db08009f3fa74189d4e0b
|
|
| BLAKE2b-256 |
9b44f92d9e7bf5d5bc60f817f985645268c1166eb1be8100610310b79c376b5a
|
File details
Details for the file memscope_fw-0.2.0a5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.
File metadata
- Download URL: memscope_fw-0.2.0a5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.12, manylinux: glibc 2.28+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be4638482792fdebbc2d3a40a362e6bb8d859555275312f5e8ce832c96eb0e38
|
|
| MD5 |
1ae9e775ddeb3f7450d4a7349e2de9d9
|
|
| BLAKE2b-256 |
4768d557a071ae35ca942af1fd125c8b42433df7da114d0facdcd7cc9c1c09fb
|
File details
Details for the file memscope_fw-0.2.0a5-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: memscope_fw-0.2.0a5-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a2612257deb3d0c1022345d32c302779c5060ba679c386ffb497e5ea8f6ed981
|
|
| MD5 |
96dbaa985d44511b1c16e6e40368b841
|
|
| BLAKE2b-256 |
0d1ed31caa74eda100426654fd7c1ad1ac73e6a35abb1a9847d893a73cda6739
|
File details
Details for the file memscope_fw-0.2.0a5-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: memscope_fw-0.2.0a5-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 2.3 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ab95ee84fe94bb7813df8bc40fe89be9d3b608b2b956670fb592ed0115dc5e1
|
|
| MD5 |
d51d0ee27bac72883f49d9fac6a69a79
|
|
| BLAKE2b-256 |
6fb6ba86684532a7760b52e610ba315cb63b970556d2bc355e47cd26cf3299d9
|
File details
Details for the file memscope_fw-0.2.0a5-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.
File metadata
- Download URL: memscope_fw-0.2.0a5-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.11, manylinux: glibc 2.28+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81d9cb541bbce9a36647d17d898bcc648de458d87900291b8bc81c702be72467
|
|
| MD5 |
bfe20a52ee8dfc6ce5f8c02c55c98ff1
|
|
| BLAKE2b-256 |
1c4f9456fc2a4ecb6502b8ff06df93c464daa8c7785977d1d6f71efb9b76d148
|
File details
Details for the file memscope_fw-0.2.0a5-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: memscope_fw-0.2.0a5-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
72f9232d32f66d17d5e6a0fa38b595869832880ca0087a9d1e92f487a513f6a5
|
|
| MD5 |
1e75f9b81f7a7a00378c977b1416ab08
|
|
| BLAKE2b-256 |
8aa917cb974c03079e172a575377bde9bcf953429ddf462ffe38903d5b62bd74
|