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.0a10.tar.gz (711.8 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.0a10-cp314-cp314-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

File metadata

  • Download URL: memscope_fw-0.2.0a10.tar.gz
  • Upload date:
  • Size: 711.8 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.0a10.tar.gz
Algorithm Hash digest
SHA256 217d8cfe2ada92f725feadb390a7420f41a0952fe2d30f83db24c81ee4434e6e
MD5 c9169e4baa6e0523b7dc8440677ab3c7
BLAKE2b-256 1d7e65b4c018a4c903dbec2ab3937b9b064c303042ee077ff6273d77185d5e25

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a10-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 6813216cd6bd4b1098d4a94aeed31f2497e63e5b850955e5070ad89348798d8a
MD5 596ebefbc047b7453f9051cd49e58b50
BLAKE2b-256 ce97c0c1cc2af7f3c738610f058ec96189889a7f5fd587ba4519f62c7bca299b

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a10-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.0a10-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 f59b810a045c3bd5f1c65f7327b677ebe9f6e81d94b3d168eb27a1f95f2afb2b
MD5 bee268cb509ffa771f518b7a2e447af9
BLAKE2b-256 f20342e8eb5c1e134f9900269a226aa0995180708c97989263e4084836624220

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a10-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0f8b7b7777196465644c7f9215ca052f6cacc550a9b2431b35596fa48f4998a5
MD5 0ffd44787e4f7317829732d2588dca56
BLAKE2b-256 07714a1b37c1e71816bb4e197c0e7a7f2dbcec884c9c541da81fa0e4efa3ba03

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a10-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 8a0ccde2b41343a4e42b49d07c214d9edf83325040049609dfbe89de0ebea41f
MD5 48eebcc12c7747d44834a86f80d7e2a4
BLAKE2b-256 5b025bcc7cc58f4e078571f0eee56d99418174cef2264be2ecdf3b97d09316bf

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a10-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.0a10-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 e5d301eed0c156c7c8187140aff20a4ecd9bf5338561874bd3d403bac6120b71
MD5 fdb62ed3a8fd21782b7eeb7c97ce5eab
BLAKE2b-256 600e693f9182c8076e050931d02f75578ae928b6520cf9c032298f8a6d1b1cf4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a10-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d0427390dde8fe760b7adb6fb2bfe4a94811b223db886ffb101d003a026ee6de
MD5 8a23cf02cc996e6dc63db8771cdcdb8a
BLAKE2b-256 67bbd7d2f7f4c3d7541be5f90422db7d12d042cb8a7bebbe43e1c05b3464a1b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a10-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a3ea338f324f7e81e91884e91fe1d13cc12cedc5effdaaa42106eda29997c480
MD5 9274110611b4db894afa5b0a7a2fff82
BLAKE2b-256 03e15ee96cce24474f1ab4e7311c26432a0615e3733b797134ef00978f007642

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a10-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.0a10-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 aebc52e786021586ae11e6128c96082669c894c1b18bd7b82b4692d9e7ed250c
MD5 f769c9d794e48ad1d27266061940a2ad
BLAKE2b-256 55bcb91e4903f65bbd1c5b718907b1ab8e21c7f55b6e2b7af1f88f546d5bf3fa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a10-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 52523089e28c3fac5e57d61f9243b1a0cd16748a7891844e7c8c7d81459ec44a
MD5 79e15a4d77cbd7f35f16aa4e55701871
BLAKE2b-256 e42748ebd9e9aa1ee6cb8312d6c3e3618c86725c1ffc74e18c65779e56f7ee5d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a10-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 510ace6c8d7cb0c8c3b5c1ec1860c6a4385a2302d3f6a35fc6c52dc59a3186f5
MD5 e770b0a352bbd222cf63fc2b6d637d75
BLAKE2b-256 07d72fa05e5bbba4072387128b6b79c2630eaee3cc42b3e005e8de2fb04e0d0a

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a10-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.0a10-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 6736bbb273f10159ddbfbc0e55b5328d5e4d23dbb52baf89c108e6da6a541a09
MD5 61a66d23839b32186d4560fda158e297
BLAKE2b-256 03f4f318a5445c79af9d2b312c1c5ffc539fd34dde6533a7c15ac8bf8563fc23

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a10-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9a32d9ab60f06dc008ca8e68c5971b59a04d0cc093bb5614bfc190447d28584b
MD5 a3a1195954a80ad095c947a28c83443d
BLAKE2b-256 d9effe5694c5401dfcda4be6bffec74e815eda51801f3a86687f3ff13dbe6fae

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