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.0a8.tar.gz (692.7 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.0a8-cp314-cp314-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.14Windows x86-64

memscope_fw-0.2.0a8-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.0a8-cp314-cp314-macosx_11_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

memscope_fw-0.2.0a8-cp313-cp313-win_amd64.whl (2.4 MB view details)

Uploaded CPython 3.13Windows x86-64

memscope_fw-0.2.0a8-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.0a8-cp313-cp313-macosx_11_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

memscope_fw-0.2.0a8-cp312-cp312-win_amd64.whl (2.4 MB view details)

Uploaded CPython 3.12Windows x86-64

memscope_fw-0.2.0a8-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.0a8-cp312-cp312-macosx_11_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

memscope_fw-0.2.0a8-cp311-cp311-win_amd64.whl (2.4 MB view details)

Uploaded CPython 3.11Windows x86-64

memscope_fw-0.2.0a8-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (2.1 MB view details)

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

memscope_fw-0.2.0a8-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.0a8.tar.gz.

File metadata

  • Download URL: memscope_fw-0.2.0a8.tar.gz
  • Upload date:
  • Size: 692.7 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.0a8.tar.gz
Algorithm Hash digest
SHA256 68aa5c3655a7f515f3abe441bd4aaf24e079973e2aeee1487cf026441f1a75bd
MD5 bab67007a5fe0bc8ce7552e2bde0458e
BLAKE2b-256 6875821c4e65b4f94d03a39bb313b43ec43cb5286aa7b56a6d37d9423fd17f69

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a8-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 40a711d9112d52955efcd33b51b740cdc81cf9b12ea718d3501ceedff8656dcf
MD5 dc1c4be9a975d3611550f4e945022c8f
BLAKE2b-256 d71f3a0b05728bdc83bdd7b03f1d4472344889a236f0cf2bea11fdc905cb73b0

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a8-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.0a8-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 9ca01a62002372f3f1d193a557862c43db6189d04d030ce2cf66933b86dabc40
MD5 65dece9d4ffdc1f0a4deae4acd5bca08
BLAKE2b-256 675bdd3cf50763353e20621b0102669078faedbb19cdee021c1454388210d2ab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a8-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 24c5afc52731eb988fe5d7fb182e28cbfeb7146c1d87c9c0ac78764811dfd0f8
MD5 79958496513c0c7c09e37d18a97db233
BLAKE2b-256 0cacd80dac0ce55425af68bc3347db596b8b4bafaf1e642d691791649452500e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a8-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 9c12e6518edb71b036ef463481bd1f752dcecf9a04106bd787fc6b7f9e33da9e
MD5 9ca70656f4b064dc28087f9b73883902
BLAKE2b-256 e2f90ceb2611495b78a6cfe7fe1ef028b6798158c591855d3a46f72e22181139

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a8-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.0a8-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 f951a19a329e8092c2aea6b4c19d6ab7eab3fed124856b6824ab93c1c1a2f189
MD5 10f47f1f225fb752d21da68318c2d34f
BLAKE2b-256 59c594fbc893ff8dfe6c7bc693d94d05f67edd119e730804ee7a8098956a22bb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a8-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 95b06b7cc499fa63a0b600467433ae54325ab324baab0aa15d1aa2e8cf81af4d
MD5 56e233c0cd9f699518d84f47de851b00
BLAKE2b-256 c466cba5bc42fedea941e08e40bfcb09bfbe921552e99b9e83ce350d4df0532b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a8-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 0fdd478f3220db38952e0b4fcb1c51c13561680a2d84bac4060b53bdec0c080b
MD5 c7684a0edfcd500340a60fc2919d47dc
BLAKE2b-256 6ecbb2bbcc5e838aadfe67d51f6e63edd0893cf51e925d9396f6f6b2343230cd

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a8-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.0a8-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 625d7903ee4fe9419c1fb70565ac479c65a76a00bbb9a0da06cc2044eebb36dd
MD5 f82048bfeda046812a83d95cf3cffffd
BLAKE2b-256 c2ea09ff607b8c40d5574b59ab27d56f910b589af0be97995c3a345b3ae4488a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a8-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d1c1023942f0372ca0859afe3a7d30ed2744c5516bee08cc25e8ae704275c570
MD5 695d5e899a14e9bdb163ec7bad5d20c8
BLAKE2b-256 86b193078f21dacf1d26e8bca9952489d3cb0ce067ed5e917f7cc136311285d0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a8-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 817bea7e0d7aa93c63313bd266a1fa8af950bd9aa1787a4634d3d06a27d7adc4
MD5 401cf614be3411046a5ee59e8c752741
BLAKE2b-256 9bb38f2196a8ca61dfa9ed5664bdbf50421a45a5723364f1661ddfe34c3ccaee

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a8-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.0a8-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 458fcc5c97e10bf26ca0740a735e867e0cf9607d1a0791ebe20e9f6bbc6e8d06
MD5 344022a5009952296b7fa8e7ffa465b4
BLAKE2b-256 7bf1ca1ff28c6883566a567769f5071a587fe26c9f79fab01c8cba4ba28bb5a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a8-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cf3ee83fcf1de347e9ce9e1f7b79cfae55684ba33a52ea422b1dcf6a81d035cf
MD5 ec8efc0d5ad9cbde2f6d4c6e3b5e2fb4
BLAKE2b-256 70ddafc7b91a4ab169c13b3ab1cade7e35deddeec4bc99fc0d53b3e8e03855e6

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