Skip to main content

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

Screenshots

A single memscope analyze run on a representative STM32H7-class firmware (Cortex-M7 + FreeRTOS + lwIP + USB CDC, 6 memory regions, ~100 contributing input sections, ~150 symbols) produces this self-contained interactive HTML report — open it in any browser, no internet required, no JS framework to install. Headline cards surface the tightest region (here, RAM_D1 at 99.8% capacity — the kind of near-overflow that's invisible until you flash silicon), total Flash / RAM consumption, and the alignment-waste budget you could reclaim:

MemScope analyze HTML report — headline view

Below the fold: Memory Layout Explorer (interactive section bars per region), Visual Insights (top contributors / functions / globals), Region Utilization (per-region capacity, alignment overhead, fragmentation), Section Explorer (drill-down with byte-level lookup), Component Ownership, Issues and Recommendations, Comparison vs baseline, and Diagnostics and Assumptions so reviewers can see exactly what was inferred vs measured. See the full-page screenshot →

memscope diff compares two builds and highlights the regressions that matter — headline byte deltas, per-region growth chart, top regressions and reductions tables, plus a deterministic JSON contract your CI can gate on:

MemScope diff report — build-to-build comparison

The fixtures used to generate these screenshots are in docs/demo/ — reproducible with python -m memscope analyze --map docs/demo/demo.map --linker docs/demo/demo.ld --html report.html.

License at a glance. MemScope is free — the memscope-fw distribution 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. Run analyze, validate, diff, and --strict CI 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: see the License section on this PyPI page (or the LICENSE file shipped inside the installed wheel).


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 reports
  • validate — JSON-schema sanity check, ideal as a CI-pipeline wedge
  • diff — baseline comparison + interactive visualization
  • --strict exit 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. The binding text — with a Plain-English summary at the top — is in the LICENSE file shipped inside the wheel, and surfaced in the License section on the PyPI project page.

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

memscope_fw-0.2.0a9.tar.gz (707.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

memscope_fw-0.2.0a9-cp314-cp314-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.14Windows x86-64

memscope_fw-0.2.0a9-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

memscope_fw-0.2.0a9-cp314-cp314-macosx_11_0_arm64.whl (2.4 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

memscope_fw-0.2.0a9-cp313-cp313-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.13Windows x86-64

memscope_fw-0.2.0a9-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

memscope_fw-0.2.0a9-cp313-cp313-macosx_11_0_arm64.whl (2.4 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

memscope_fw-0.2.0a9-cp312-cp312-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.12Windows x86-64

memscope_fw-0.2.0a9-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

memscope_fw-0.2.0a9-cp312-cp312-macosx_11_0_arm64.whl (2.4 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

memscope_fw-0.2.0a9-cp311-cp311-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.11Windows x86-64

memscope_fw-0.2.0a9-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

memscope_fw-0.2.0a9-cp311-cp311-macosx_11_0_arm64.whl (2.4 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file memscope_fw-0.2.0a9.tar.gz.

File metadata

  • Download URL: memscope_fw-0.2.0a9.tar.gz
  • Upload date:
  • Size: 707.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for memscope_fw-0.2.0a9.tar.gz
Algorithm Hash digest
SHA256 6161efd95b481ddba8e1351878786477e3cb8eee219ea90f2eaaff734752f59c
MD5 fe514e035262a546e405fa84f369cc12
BLAKE2b-256 0d0a1e88b3f5dfbcab335f039081a2e6befe9087a061fc94031153048f8f1fbe

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a9-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for memscope_fw-0.2.0a9-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 bb5922f8522ac5ebfe0cd8c867c79dbce57634788d2c9ac451b0d13c18967ab4
MD5 a7121c2971630924171c13526f45c130
BLAKE2b-256 ef11efad538751c439f1e8ae31777ce8728b09efdd81dfdc2bc3064fc731f700

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a9-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for memscope_fw-0.2.0a9-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 0b7e8b958c67190e68ef0b2b9204c477f7150290b4f1e2be719eedda0a5e4c3c
MD5 ca32fe1687858f05665fc79a639babf7
BLAKE2b-256 6a54fb55b8b7677baf2bdc025660f20f42dfc12e8bf7311edb6bc99047a170ee

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a9-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for memscope_fw-0.2.0a9-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7746475f94f26cdbc40f78a4b397099c1824a50d496700398eef18e33e3bc8a5
MD5 cf191fef99f110c818db210f068962be
BLAKE2b-256 3b9d33ad40c34ae6c2a194586cb5630651feb4709e544196c986c4895c2c29a1

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a9-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for memscope_fw-0.2.0a9-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ea785df1edba6cc2ea687504756c8e5bcb6a2f0865848594dea2daace9addf45
MD5 d3a174fc598f982aa0f11560d6b95f03
BLAKE2b-256 fc5c90dc055bc5c149927b888c73f9c6caf0f7953b94308b3764c7d97c405420

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a9-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for memscope_fw-0.2.0a9-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 133143e72bfd9367a922398246bf5c5671543972a5f8ea19f57a801bd6df1d4f
MD5 ab8408b5da3a0e30c508194ec7b7031b
BLAKE2b-256 196f538795e3abae3d18763048b5ff1c8b1cad61ef0a16df2eb4c4cda06e083e

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a9-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for memscope_fw-0.2.0a9-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a75552a3a9bc14b21a952c87bcb066821497c685b2a2a1fc3209f48d8b1ff010
MD5 aede942e75637b476dcb38b4f301fd23
BLAKE2b-256 847ca8de555dc228a95101d20c56d24aa77fb8ad8af95f90e42a5f95e8292e40

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a9-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for memscope_fw-0.2.0a9-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 b26d57d66d2f039105db7ccef0bcc95f105e86a5e52dd2d3d9d96e2447ec7b62
MD5 e870a1c8faa5ed480f1b18ccf88b9591
BLAKE2b-256 d898db9ebcb071308932faa11180c7b47f3ee16b92170465b6e96e090d8a4058

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a9-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for memscope_fw-0.2.0a9-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 a6bad4bd5d07f821be30b6383cf45b2c22de77481b3ca5f215c0b1abd464f645
MD5 2bce25887a4de5f6ed6a409eca6fac91
BLAKE2b-256 54173eee55c231a96335be9e5bcdbd440e851f2a95b20ce55fe06ec5dad6ba60

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a9-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for memscope_fw-0.2.0a9-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1250d56f13bdbc76a3f02d8702a0dddb071665ce72fe37ebde5b16ee60bd9700
MD5 4d64870900d4c520c293d979d98b80b5
BLAKE2b-256 938f9108bdece3d50238c01f4bedc5d7563cf666fa423f5a67dcd6678ab0dd98

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a9-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for memscope_fw-0.2.0a9-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 5b524c0f545fc2ee5c71c9fdf84a468bee01b62a4ce4da943f0cfd65afec415d
MD5 a3bef984aa1f65551c12938b40949e6a
BLAKE2b-256 2c338db997cdc9df1908ac21e20a6e437c047e238355aaf2abe62b35a5e3b518

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a9-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for memscope_fw-0.2.0a9-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 5d0ddfb4fe75e53a5319b0e311e0fa4574bcfa9e1e5abc73d3498c9f0f87c2b2
MD5 15a3a2537140d1d5a1d22ebc886468de
BLAKE2b-256 f3a0efaf17f2d1927e260b12c26fe02bf8630c55f72171c93bb69269c37cb9be

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a9-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for memscope_fw-0.2.0a9-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6e7811c81632821a03b4dfb5b6bedb990705fcef7dcc38c0a34ec1a4a7d204d7
MD5 da9d28bbd7615cfb1e678be6c02c30a4
BLAKE2b-256 670a2f0e9cf645148dcee7142944d274da13dd88c51a1c0dfe179c337b43528c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page