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

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

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

File metadata

  • Download URL: memscope_fw-0.2.0a6.tar.gz
  • Upload date:
  • Size: 687.3 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.0a6.tar.gz
Algorithm Hash digest
SHA256 f62b14ca1f61c74dc2d547eb91bd51e208a6b4628ec3b4f79591b3c71bb39ecb
MD5 2b53b2aa20b7b542146f506bd82091e3
BLAKE2b-256 4c5a1bb66eab3d84389d8f135e0e039b9ac465566b734fb0f3eb17c49a5996b9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a6-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 bd487890eb1a9d3a28515ae7b37d4069efe287295fd90cc83aa5c964ee056319
MD5 c607c5306914a5f1a7637848ce6b1f45
BLAKE2b-256 2227ab0c4b5c0f36a9013f29b535313074bda5cebc2b1736b2830664a004662d

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a6-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.0a6-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 e129ee8b9c1fe719339b00503e300c94263249d75542fec5f4f2bfeb43470a98
MD5 a216fe8a7a93ccf4af5b7668ee1628d3
BLAKE2b-256 d30f552978754e8de8f5d2310c5b366b80e6a3f6872f1b9d754f43dc21b7af8f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a6-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3e7f430c5fbb499c4b1297db68c9ce10ab07be9f69260b5103ffab22b8c6b953
MD5 da74ca6c1a78bd67ea339e044764d5f6
BLAKE2b-256 34ca7a8287e130b488f0fdd6e0aad17ab82b5b7fe43c89aa61b6fd976bae7f54

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4d0353ff0ca3f2fba474983a6aa6520f9c0ddccc1483aec342a6735f5a5659d2
MD5 5352a4b985e370f0e8759d3fcfbe10df
BLAKE2b-256 4333191fb216ebe002d0734b2d2590f8bb1bd1edea4e6c01dc13345a14a40472

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a6-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.0a6-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 92114825795b8668983957774b8d0d0314fc6995b8f9db9363b3d83f37b5d53d
MD5 73a2430226863b832b29b6005da460c2
BLAKE2b-256 56a4aabf7afa952e945aaca07862d17475b5bc582739bbddd0239781d8265b5b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6eddd64d62f82897138a69700275a39d64131975c5d94d249f360e9495be8099
MD5 c12f924d37063ecc1b131c866cd6c819
BLAKE2b-256 6ed3611f4a43f73c4b0387c2b21228f3999cfc7199bdf74cf4c46dc32d341d2e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 fa5a50a978d4162f53a485d2c6c89476a0727fb03b3cc0eb9c85df492d0dcaf8
MD5 4ef65aae6a30c290f1d185c03e4da949
BLAKE2b-256 f02f273f4bbecd17538932ba61a501acf94098c0d2e6fa1ebc1886816e45d169

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a6-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.0a6-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 ac4ca9b868dc59ca6962bbd34ae265fd8d65b65b768aa5d6b1d53d70177120c7
MD5 e2f4c27d8d0e553243e3445e8e27fb2a
BLAKE2b-256 8b25e1cc5397d2bfa605933cfa3270e288c40921761337e47730b404b0071583

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4640517d8d206546a6d38a8a3bfe27558bea92fc8ad2541a42ab1a9bf1fc79df
MD5 e7cb544f63923466b6e19ded2ec7b9f3
BLAKE2b-256 6274642387b797006b0a3e8bac3fbd443d09c95c2861e1e717f203f067f87fd7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 522a6a807be1e43bc97a38df5b0b9b11e12a73ce5ea2ac42e2f850b8521791b9
MD5 ac18d9601eaf783951d079d08323ff8e
BLAKE2b-256 326a49f9cde09162c6035fda283cf04158eebd38e48b2a6d76bdde47975f1f88

See more details on using hashes here.

File details

Details for the file memscope_fw-0.2.0a6-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.0a6-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 c58042fcb5512faf71c5033e8d8a2139f3b3f43b58d79550d38ab8bc2221d7a5
MD5 1cbe3d6a8c8f68e2bfe2f2d92fa5b0d2
BLAKE2b-256 7895917318430edf053eecad142f37f105fc07895a8efbbe5f14626d5d8f5c97

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for memscope_fw-0.2.0a6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 55943f2a52a7cc4a049bcc4b711e2e314014048a2116fc0aa944b5abd628c176
MD5 aff529002ac2bfd300e64d5dbcde40df
BLAKE2b-256 aefea71ab516cb3b6582de82e5fc5707431f867423d6932dafcf76b66889cc3d

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