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

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

File metadata

  • Download URL: memscope_fw-0.2.0a11.tar.gz
  • Upload date:
  • Size: 718.4 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.0a11.tar.gz
Algorithm Hash digest
SHA256 082a9566a0259076bc36aa22a30c0851c2f0d48f0ca99a6c1b71ed59c2687b86
MD5 14256d46d9b1496e1809474937e7e057
BLAKE2b-256 b5086f3f6d137c49d46ec7aee60ab601795fe840a3ec43d7bfabf36c1dec208e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a11-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 1578feb6250640a4e18eecca1520896fc5f2d12040f34f68151d1528bc3e511b
MD5 7f4b4e942cb49b50d29fc046e112f131
BLAKE2b-256 424c88dd6b956a964534df6a621f78c94715677fe1be40a62ec643e69a6c6474

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a11-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.0a11-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 8ed1584d971334feace3d7f0eee47d30f16c8714ed7c49e5cbcfedc883eb56f1
MD5 f1b9c33d9bec2cc8d824e990fa27184a
BLAKE2b-256 b8954e369c87e67d5cb0f9dc64b67d6f1b7efa8f46eff8e7bd948cd9eb43b2c5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a11-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6a83150a70c93ccef4d197845dbbdfc209180c8d25e00e5831fbe67e39549284
MD5 7f5131ab57276f69499227560f198677
BLAKE2b-256 ba5680df1a7c1a4209fdf5f21cef12cf1b6ed03d83f3be6e205865466603d48c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a11-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 1d4d96a9a83ca09c947e33fe212198086622f4fc102c1cf754e65717d8dae38a
MD5 ebee9633fd86a498b2c1e2c4223df797
BLAKE2b-256 3ee5b05184022c47f9b15a52dd2fc6e6f03d4877a07d180996e22461d18e5241

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a11-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.0a11-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 47b7a5fb00e07794f9d528337d20a82b6aa0ec2434256145aaa3f8e6d9351d90
MD5 7057c78194499bca4c482bdeb30c3ebe
BLAKE2b-256 89240cae68291f9325a27a930df1d3935ee6774e321b6f282b86350388f9d95b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a11-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1a56e370ee1d4b2c1c8acadf4accbbe90038c6fc14f063ae34c367da3a637095
MD5 2d84cde7253f6337f4de0dbe8a3c5099
BLAKE2b-256 04d9ff73b64d29c5a9e2ee390a28fe4a740798444d885cede31c8f738ca8c1e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a11-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4ae7c4f8f7343a75d3f239a56ca2e041b44d93fab0c49342971acefc5465377e
MD5 5fae08222c140ab3f1f558785aee5376
BLAKE2b-256 a51d196592cfb40521f8617f62239f4f05febbbaa717bbd82c58e81bbbf33222

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a11-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.0a11-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 630835ff6e4ffe6708c26efddc1ebf68d3712eb1e6a8cc837324a34c6441223d
MD5 e554c823999c5b601f8d7d1b00aee2fa
BLAKE2b-256 8ddb0ff64d0d93cda0cad4c1d13c61a581f57bffb14a8776c28dcc97af198cfe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a11-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bf44f7874e383ca36969113f3d4f2242642d579f4c46847a6b589b46d0e3f84e
MD5 bcce1aa86dd2ffef8342d1a9a0804204
BLAKE2b-256 0c147b1362a5ff0b3c6a66caa0b8b75c4666eb7f4c9bc90e097d109db8976f43

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a11-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 27377dea047f6af5028b6bc913c556bb7433c6b981bfdc519d8242bf34f674de
MD5 d31ac7a3f604cddcdb46a8b2346273da
BLAKE2b-256 d2c77fe3ade5fb946b296be91ef70066b1c1e1e48520087e97304c289f3644d5

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a11-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.0a11-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 fd0d99562f0c89d0c531679d2ab3325fb3d8a4d593e2156fab6c155016407e52
MD5 fcf4f09a870c9401b315f8eda1ef0c8b
BLAKE2b-256 e6184f50867ea281e67b7ee6977a8a707de47f783589db65df94aacbbdeea591

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a11-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6666fd84baa9541bacf2148aed1522358d42f411469a95a7b317d552146f6fe3
MD5 cadb1eeebea45f18195d5b6e5d64142c
BLAKE2b-256 76371cbdc9f6337fca9ce0389b5bc068c04076f1c1f0d93b8d335a62a545aa07

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