Skip to main content

MemBrowse logo

MemBrowse

PyPI version Python Versions License: GPL v3 Downloads GitHub Marketplace — verified creator GitHub stars

Catch memory regressions before they ship. MemBrowse tracks the flash and RAM footprint of your firmware on every commit, comments the memory diff on every pull request, and fails the build when you blow your budget.

It extracts detailed memory information from ELF files and linker scripts — down to symbol-level analysis with source file mapping across multiple architectures. Use the CLI standalone for instant local analysis, or connect it to MemBrowse for historical tracking, PR diffs, and CI gating.

Get your free API key: Sign up to unlock PR comments, historical tracking, and budget alerts. No account needed to use the CLI locally.

📖 Full documentation: docs.membrowse.com

MemBrowse dashboard: targets overview, memory timeline, commit-to-commit diff, and CI budget gating

Firmware teams tracking memory with MemBrowse

Flipper Devices
Flipper Devices
wolfSSL
wolfSSL
Apache NuttX
Apache NuttX
RT-Thread
RT-Thread
TinyUSB
TinyUSB
SuperTinyKernel
SuperTinyKernel
CMRX
CMRX

…and more.

Features

  • Architecture Agnostic: Works with any toolchain that produces ELFs with DWARF debug info (ARM, Xtensa, RISC-V, and more)
  • Source File Mapping: Symbols are mapped back to their definition source files
  • Memory Region Extraction: Reads memory layout from GNU LD scripts, IAR ICF files, and SEGGER Embedded Studio .emProject files
  • Cloud Integration: Upload reports to MemBrowse for historical tracking, PR diffs, monitoring, and CI gating

Quick Start

Analyze your firmware locally (no account required)

pip install membrowse

membrowse report build/firmware.elf "src/linker.ld"

Example output:

ELF Metadata: build/firmware.elf  |  Arch: ARM  |  Machine: EM_ARM  |  Toolchain: gcc-10.3.1  |  Entry: 0x0802015d  |  Type: ET_EXEC
==========================================================================================================================================================

Region               Address Range                                Size                Used                Free  Utilization
--------------------------------------------------------------------------------------------------------------------------------------------
FLASH                0x08000000-0x08100000             1,048,576 bytes       365,192 bytes       683,384 bytes  [██████░░░░░░░░░░░░░░] 34.8%
  └─ FLASH_START     0x08000000-0x08004000                16,384 bytes        14,708 bytes         1,676 bytes  [█████████████████░░░] 89.8%
     • .isr_vector              392 bytes
     • .isr_extratext        14,316 bytes
  └─ FLASH_TEXT      0x08020000-0x08100000               917,504 bytes       350,484 bytes       567,020 bytes  [███████░░░░░░░░░░░░░] 38.2%
     • .text                350,476 bytes
RAM                  0x20000000-0x20020000               131,072 bytes        26,960 bytes       104,112 bytes  [████░░░░░░░░░░░░░░░░] 20.6%
  • .bss                     8,476 bytes
  • .heap                   16,384 bytes
  • .stack                   2,048 bytes

Top 20 Largest Symbols
======================

Name                                     Address                    Size  Type       Section              Source
--------------------------------------------------------------------------------------------------------------------------------------------
usb_device                               0x20000a30          5,444 bytes  OBJECT     .bss                 usb.c
mp_qstr_const_pool                       0x08062b70          4,692 bytes  OBJECT     .text                qstr.c
mp_execute_bytecode                      0x080392f9          4,208 bytes  FUNC       .text                vm.c
...

See the CLI reference for JSON output, symbol filtering, uploading, and historical onboarding.

Track memory in CI (GitHub Actions)

Add a workflow that analyzes each push/PR and comments the diff on pull requests:

name: Memory Analysis
on: [push, pull_request]

jobs:
  analyze:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Build firmware
        run: make all # your build commands

      - name: Analyze memory
        uses: membrowse/membrowse-action@v1
        with:
          elf: build/firmware.elf
          ld: "src/linker.ld"
          target_name: stm32f4
          api_key: ${{ secrets.MEMBROWSE_API_KEY }}

      - name: Post PR comment
        if: github.event_name == 'pull_request'
        uses: membrowse/membrowse-action/comment-action@v1
        with:
          api_key: ${{ secrets.MEMBROWSE_API_KEY }}
          commit: ${{ github.event.pull_request.head.sha }}

Add your MemBrowse API key as a repository secret named MEMBROWSE_API_KEY (get one free). The action is published on the GitHub Marketplace by a verified creator.

For historical onboarding, custom comment templates, overflow tracking (limits), and all action inputs, see docs.membrowse.com.

Set it up with Claude Code

If you use Claude Code, install the MemBrowse plugin and let it wire everything up for you:

/plugin marketplace add membrowse/membrowse-action
/plugin install membrowse@membrowse-marketplace
/membrowse-integrate

This analyzes your build, verifies linker scripts, creates the config, and sets up the GitHub Actions workflows.

Platform Support

MemBrowse works with any toolchain that produces ELF files. Supported memory layout sources:

  • GNU LD linker scripts (*.ld, *.cmd), including INCLUDEd sub-scripts
  • IAR EWARM ICF files (*.icf)
  • SEGGER Embedded Studio project files (*.emProject)

Format detection is content-based, so the file extension doesn't have to match.

Not getting optimal results? Contact us at support@membrowse.com — we're actively improving MemBrowse.

Documentation & Support

License

See LICENSE file for details.

Release files for membrowse 1.2.10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for membrowse 1.2.10
File Size Uploaded
membrowse-1.2.10.tar.gz 260.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for membrowse 1.2.10
File Interpreter ABI Platform
membrowse-1.2.10-py3-none-any.whl Python 3 none any Details

Total release size: 416.9 kB

Release files / membrowse-1.2.10.tar.gz

Download URL membrowse-1.2.10.tar.gz
Size 260.5 kB
Tags Source
SHA-256 checksum
How to use checksums
4280741ed37ce6e69ea3304f0b17a863e7efb5d56391828721c4d416fc867029
BLAKE2b-256 checksum
How to use checksums
636497266d6bdea08edc6665bd4218845d225fff3f06188277e2836ade020f03
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.

Transparency log

Release files / membrowse-1.2.10-py3-none-any.whl

Download URL membrowse-1.2.10-py3-none-any.whl
Size 156.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
95b4356cd5b3cbb2b7e2d0aa93fa37a08d8835e0541f79693d531f0f7bc54595
BLAKE2b-256 checksum
How to use checksums
a88b97c372161234f8d35213625b64ca44c12cc7c8d6c1cea7b363dcd756f4f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.

Transparency log

Release history Release notifications | RSS feed

1.2.11

2 release files

This release

1.2.10 This release

2 release files

1.2.9

2 release files

1.2.8

2 release files

1.2.7

2 release files

1.2.6

2 release files

1.2.5

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.9

2 release files

1.1.8

2 release files

1.1.7

2 release files

1.1.6

2 release files

1.1.5

2 release files

1.1.4

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.12

2 release files

1.0.11

2 release files

1.0.10

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page