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.0a7.tar.gz (689.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.0a7-cp314-cp314-win_amd64.whl (2.3 MB view details)

Uploaded CPython 3.14Windows x86-64

memscope_fw-0.2.0a7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (2.0 MB view details)

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

memscope_fw-0.2.0a7-cp314-cp314-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

memscope_fw-0.2.0a7-cp313-cp313-win_amd64.whl (2.3 MB view details)

Uploaded CPython 3.13Windows x86-64

memscope_fw-0.2.0a7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (2.0 MB view details)

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

memscope_fw-0.2.0a7-cp313-cp313-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

memscope_fw-0.2.0a7-cp312-cp312-win_amd64.whl (2.3 MB view details)

Uploaded CPython 3.12Windows x86-64

memscope_fw-0.2.0a7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (2.0 MB view details)

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

memscope_fw-0.2.0a7-cp312-cp312-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

memscope_fw-0.2.0a7-cp311-cp311-win_amd64.whl (2.3 MB view details)

Uploaded CPython 3.11Windows x86-64

memscope_fw-0.2.0a7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (2.0 MB view details)

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

memscope_fw-0.2.0a7-cp311-cp311-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: memscope_fw-0.2.0a7.tar.gz
  • Upload date:
  • Size: 689.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.0a7.tar.gz
Algorithm Hash digest
SHA256 83a9c45bba43a85448ece5d17134f0c80a315277649f70a46ef88706cdd7fca0
MD5 c5920359e8debfafb063b2d139c58e52
BLAKE2b-256 6abcb3a15adafc83949b56bd6ec672821c2bbdb49bd7661cd27acb688a817253

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a7-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 e7ba31bfee5d33213cd1c2c8571f71d9c460cef5977ea4652b78746b45995831
MD5 f05b9340cb3ec9b4f176a5fb8835c484
BLAKE2b-256 f31719db98e2fe208e3720ff44408d34b597346541748d5bdda6d6d7fe6d1ab5

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a7-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.0a7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 f00ff2c2c8d718e5a5dad1f92202ded10a6737b5448b7d1352e5cd69265fcd31
MD5 8d168b92ce5397ec7d1a07960d6ab60f
BLAKE2b-256 3125128290c174fe397a7aed28a40a0a82a698c97001dd2dfb76ca957ad5e5e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a7-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c3871264b084ad7df6c89c11c273eab1a36074f55c89c4690c078f6d46ef280d
MD5 3152e4561f5a605e83a927b1a75cfa7e
BLAKE2b-256 a1a0cda4a31522fef96fb640bb1e331d9fcf8a9e6bbc00eda7e3d5d2a0537c7e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a7-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 9d57f4644650b4984582df2bba6521510f19ab882505fb0f4c6da51245dc285e
MD5 71277503ba0f67f5ffc6080f2143520d
BLAKE2b-256 d9e748a95cc21a57059c4ddf91d3576a29b4e92f65bd10ebad59d3f929e236c2

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a7-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.0a7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 92bc376b1c04a643caef9bf63258e9a76fdf18e528730ec5107906515f5fa196
MD5 c90d2b18bfbc98378689e7c1f731a351
BLAKE2b-256 9d85e0a708f6cd0b0106a87b7b43f3a105656f808458eab6c12d0bc32502cb25

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a7-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9251bc064d2d49102491521bddc2dcd7fad3df8a7fa28261b2f72ad49549db19
MD5 f8d12c1bb9ec1a69aab359cc4487a856
BLAKE2b-256 2ec0c944e802cdbf7c0e0478db3ce1fb16300ad0152ae212fb1a317d74c6e16a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 dacf1fc153f75b1a83c8c268e3da475aa6aafde7b61f3d870084bfe497179908
MD5 75a0ab05fdbd732c57d91aaa83e57a61
BLAKE2b-256 d2fceb8bab9f7e71d6186977b728f4e54fe56c9b01f50a26a9bfcf41d1d85efa

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a7-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.0a7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 67fc674d5eed29b25faa282017d99d5e4dba0b762b134f84fa2d11ede8393f7b
MD5 dc4a5345b2af9421ad5fc332a18cbbf6
BLAKE2b-256 0ac124cbfd7ee3249866edf95b605fe77b36135203d14c5a4f729510d8bdcde1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a7-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c87132813c0124b86e26ae56f18586c0d9220518dd49068c18ccd9c4efd0bcd4
MD5 cf5efa78a9a7fc73e58aa374695e5814
BLAKE2b-256 950e4566190958b61585d6f84683c5db9d85945ea98f85b5fb5fba8cde4dab40

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d4125a5e861e5210e99ceac80fcbf50a6a3021dab7aa52ea006099efb3fee277
MD5 20b4bbe31dfd5db0b6f73b443771d365
BLAKE2b-256 8832d5ed68547aa060141891ef5a4a3de231fff8e97bfc4283f6459668975fa6

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a7-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.0a7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 96793dde699e02fda5f0123813c7f8468a8f3d789bf280bcd007008ff88080cd
MD5 be5ec74aaafbe8062b01befaf45fc1e8
BLAKE2b-256 3dd5ca2e54d9df6ea99b9bb8530f2c7a6a3cdb3732c40b39ee40fcccc976d54e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a7-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 61ef9009fca0d48a148df48da30e14f16bfcb3b3699ccd4a1c5269988d0d6c8a
MD5 7b90d5852e5d13fd0aea03d70e9a1036
BLAKE2b-256 bc58887d40bdc6eeeac4013f2d209624e3edd39c05c94c4f9c41b52cd21514bc

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