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
  • Plain-text + markdown memory-layout dumps (--text / --markdown) — full-memory hierarchical region → section → top-symbols trees, designed for PR comments, build logs, and diff-friendly snapshots
  • 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.0a12.tar.gz (745.9 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.0a12-cp314-cp314-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.14Windows x86-64

memscope_fw-0.2.0a12-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (2.3 MB view details)

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

memscope_fw-0.2.0a12-cp314-cp314-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

memscope_fw-0.2.0a12-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (2.3 MB view details)

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

memscope_fw-0.2.0a12-cp313-cp313-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

memscope_fw-0.2.0a12-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (2.3 MB view details)

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

memscope_fw-0.2.0a12-cp312-cp312-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

memscope_fw-0.2.0a12-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (2.3 MB view details)

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

memscope_fw-0.2.0a12-cp311-cp311-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: memscope_fw-0.2.0a12.tar.gz
  • Upload date:
  • Size: 745.9 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.0a12.tar.gz
Algorithm Hash digest
SHA256 f78c51d371a8770caeeb41f65ee57086bd7c894ec3e9ea40daf408c0983c2dd2
MD5 d8ec679087b46746f8cfcb12de73d856
BLAKE2b-256 b521f35b2aef3a8c5a1054b7034a905e08a512336af3e5524ba25924625ff3d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a12-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 7cd18b6c458c2d669e46cae7c4e53b59d62b5acfa4c250dacce7ac1c0ae4679f
MD5 023c6b708cf6ce42ba1694b579ab4acb
BLAKE2b-256 497212004200b196ae868c3fde38e5e9cce9b5e5ac9cfa8bfa61705ade7989d1

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a12-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.0a12-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 c7217d5ae85b0efb3bb55176b0a0927f99ca2cc89eca18e2414b7359d6a3fdc3
MD5 31e6a20da07b698c7031a032cc086d9d
BLAKE2b-256 38634d93794dac514b14787d91e20897b254fb9b604c551394299e5fa8414ab8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a12-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6b57408fa2ce1e09c4d8d7963c0ff85baeb8c1564ad33a29b15c573caa6c17c0
MD5 800f8a2d8236325fca66f47daad52790
BLAKE2b-256 bcfcf648d3468e6a984282238f8a123918a9daa1a27c10580a670c9033f66f95

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a12-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 622aa3e3631ec220aeff088f8c3cca98dcf75d1ec775c980bc6eaa7d09d4c88f
MD5 f8a2ae4a943f46bf2da26537db213255
BLAKE2b-256 1a115f71f2b2199856e24e003aa2729b18608c1e1779fcd3dba89b222cf637dd

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a12-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.0a12-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 5b34c9d1d5fa360cd47aa0b096bffc95dce9387cbf0d1ed9adbacd5b4c1dc0da
MD5 0fa5aac732ec9c9be650f94c24a6c176
BLAKE2b-256 190d4d018f37ee4981987dd8894610449763b0f8b9ecf8bffd4eabd5d2abbd82

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a12-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8326196062f84c6ea136a22bceb064e255ea2fee434db9271e2971b28d57fb11
MD5 a97c62b244149f3ce08d34c2b332235b
BLAKE2b-256 2ef55191335f7baddc81643eed218dc97a07f74a1c36ed534a41e818121b71e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a12-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 55e1e83683ae6419f134b79eb16cdc5fcfe054b1120e38cd3e4162ef0fdff85f
MD5 069ceea681fbb39fc3db6e15fe948df7
BLAKE2b-256 45f5a7e42aaa6558e2924f002ea53bbaf849b3668273e5dcd3c95c92692f3acc

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a12-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.0a12-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 caf1fc03aea1ac696586901597e03e07d29812ea99bd25654263e2a0ad6e26df
MD5 8bd4759d99deffb76bb2d39b379d90e8
BLAKE2b-256 b775216607b0c4b4f7260c4195d99cc1c49c823538f72c13e68f50f0dcfb3d5d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a12-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bc1ce26d9a0b47fff760b108f2b6aa850de7194ca9ee084e2343c8b05553388a
MD5 b18095632e040fc0547caaa4f81fa206
BLAKE2b-256 0f8bc53c4d693b49de9264496d3d21f96c9c674ca29b7c29eee1575d17451f75

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a12-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ceda52365dcef89eb602d86e045308b59e13073203ed5995f587b5a27e0d094d
MD5 06788d82e506103b73482b28cc7657c4
BLAKE2b-256 00f68e2b02b8b3ac566f9140f3dc9868f6b3fcd396b3b0a811a9ccef6674cd30

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a12-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.0a12-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 a0074262493e5eff07614d9eca23884b35c98c0d7fe4cb8594274d2d074c838d
MD5 294eadc1150570383d7f0eee589ce56a
BLAKE2b-256 4d7477d4bf86720eb85dbbee615bbf93ae2ff896cd275d565cf83cc3c6c84886

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a12-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dd97bb698e182755223b7be1da86d27269c44bd0402c198f6a2295f05961e15a
MD5 a49748a8c1653d9aac2c67fb7bea231b
BLAKE2b-256 b983193d09a2508108869246ee6bd0cb529411a369525854a9594def66dede8c

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