Skip to main content

mapcan

A free, open-source CAN database editor.
Draw signals on the bit layout, keep the map in git, and get DBC, PDF, Excel and C code from one file.

CI PyPI VS Code extension Python 3.12 | 3.13 | 3.14 License: Apache-2.0

CAN 2.0A/B · CAN FD · SAE J1939 · CANopen · Windows, Linux, VS Code

Try it on your DBC · Why not just DBC · Installation · Outputs · Documentation

A signal drawn on free bits and named; moved over another signal, the overlap is marked at once; the move undone and the export menu opened

Your CAN interface is described three times: in a spreadsheet or a Word document for the team, in a DBC for the bus analyzer and in the firmware's headers. Sooner or later they disagree, and nobody knows which one is right. mapcan keeps the interface in one YAML file and generates the rest from it, so they cannot drift apart. The file is reviewed in pull requests like code, and every mistake (overlapping signals, clashing IDs, unknown receivers) is reported with its line before anything is built.

Already have a DBC?

pipx install "mapcan[desktop]"              # or the Windows installer below
mapcan import dbc vehicle.dbc               # → vehicle.yaml
mapcan validate vehicle.yaml                # what your DBC got wrong, with lines
mapcan build vehicle.yaml -o build/         # PDF, Excel, HTML, DBC, C and Python at once
mapcan app vehicle.yaml                     # edit it on the bit layout

You keep your tools: the DBC exported back works in CANalyzer, SavvyCAN, PCAN-View and Wireshark.

Why not just a DBC file?

DBC Spreadsheet / Word mapcan
Readable git diff, review in pull requests partly: editors reorder the file no ✅ comments and order are kept
Overlaps, clashing IDs, unknown receivers caught in some editors no ✅ as you type and in CI
J1939 PGNs and addresses, CANopen node IDs and PDOs attributes by convention free text ✅ part of the format
A specification for people (PDF, Excel, HTML) no ✅ written by hand ✅ generated
C pack/unpack for firmware, Python for test benches with third-party tools no ✅
Works in CANalyzer, SavvyCAN, Wireshark ✅ no ✅ exports DBC
One system split into several files no separate files, kept in sync by hand ✅ includes

Who it is for

  • Firmware engineers: generated C with IDs, enums, structs and pack/unpack, no dynamic memory.
  • Test and validation: a Python module with the same frames for test benches, and a DBC for the analyzer.
  • Systems engineers and leads: one reviewed source of truth, and a PDF or Excel specification for suppliers and customers, also in Russian and to ESKD/GOST.

Installation

Platform How
Windows mapcan-X.Y.Z-setup.exe from Releases: no Python or administrator rights needed
Linux x64 mapcan-X.Y.Z-linux-x64.tar.gz from Releases: run mapcan/mapcan-app or mapcan/mapcan
Any OS, Python 3.12+ uv tool install "mapcan[desktop]" or pipx install "mapcan[desktop]"
VS Code The extension from the Marketplace or Open VSX: it installs mapcan by itself
CI pip install mapcan (the core) or the Docker image ghcr.io/ordu1453/mapcan:<version>
Optional parts, the Windows installer, offline installs, moving from canmap

Optional parts. pip install mapcan is the core: validation, DBC, EDS, Markdown, HTML, C and Python code, enough for CI and firmware builds. Extras add web (the editor in a browser), pdf, xlsx, lsp (the language server for editors), desktop (the app with all its exports) and all. A command that needs a missing part says which one to install.

Windows installer. It adds mapcan to the Start menu, the desktop and "Open with" for .yaml files, and optionally the mapcan command to PATH. A double-clicked map opens in the window already running, and the editor announces new versions. The portable mapcan-X.Y.Z-windows-x64.zip needs no install. The installer is not code-signed, so SmartScreen may warn: More info → Run anyway.

Offline. On a machine with access, pip wheel . -w wheelhouse; copy the folder and run pip install --no-index --find-links wheelhouse mapcan.

From canmap. The tool used to be called canmap. The Windows installer upgrades it by itself; with uv or pipx, uv tool uninstall canmap and install again. Settings move from ~/.canmap to ~/.mapcan; maps need the key mapcan: 1.

Quick start

mapcan app                                  # the editor in its own window

Click New map… and pick a template (CANopen, J1939, CAN with explicit IDs or empty), or open one of the examples. Add devices, frames and signals in the tree and draw signals on the frame's bit layout; mistakes show up as you type. On the command line:

mapcan validate my-map.yaml                 # errors with file, line and column
mapcan build my-map.yaml -o build/          # every output at once

Outputs

Output Command
📄 PDF: title page, contents, bit diagrams, tables (also ESKD/GOST) mapcan export pdf
📊 Excel: addressing, contents, bit layouts, changes mapcan export xlsx
📝 Markdown for a README or wiki, HTML with search mapcan export md / html
🔌 DBC for CANalyzer, SavvyCAN, PCAN-View, Wireshark mapcan export dbc
🧩 EDS of each CANopen device mapcan export eds
⚙️ C: IDs, enums, structs, pack/unpack; no dynamic memory mapcan gen c
🐍 Python module for tests and test benches mapcan gen py
🔀 Comparison of two versions, changelog mapcan diff
📥 A map from an existing DBC mapcan import dbc

Pages of a generated PDF: a bus with its addressing table, frames with their bit layouts

Documents are produced in English or Russian, with your logo and templates; docs/cli.md has every command, the generated C code and the customization.

Editors

The mapcan app (mapcan app, or mapcan serve in a browser) edits a map in forms that adapt to the protocol and on the bit layout: drag across free bits to add a signal, drag a signal to move it. It checks the map as you type, previews every output and compares versions from git. Files keep their comments and formatting, so a diff shows only what you changed. More in docs/web.md.

The mapcan editor: the map's tree, the bit layout of a frame and its properties

VS Code with the mapcan extension checks maps as you type and adds the Map view, the Node panel with the bit layout, hovers, quick fixes, rename, export and the map's history (vscode/README.md). Any editor with a YAML language server completes keys from the JSON Schema.

VS Code: a signal drawn on free bits of the layout appears in the YAML, gets a name and an encoding, is made longer by its edge, and dragged over another signal the overlap is marked at once

A map

mapcan: 1

document:
  title: Electric vehicle example map
  version: 0.1.0
  language: en

buses:
  - name: powertrain
    bitrate: 500000
    protocol: can
    devices:
      - name: bms
        frames:
          - name: bms_status
            id: 0x100
            length: 8
            cycle_ms: 100
            receivers: [vcu]
            signals:
              - {name: pack_voltage, byte: 0, encoding: float, unit: V, min: 0, max: 1000}
              - {name: pack_current, byte: 4, encoding: float, unit: A, initial: 0}
      - name: vcu

The examples cover each protocol: minimal.yaml (every kind of signal in one CANopen frame), j1939.yaml, canopen-node.yaml (PDOs mapped to CiA 402 objects), vehicle-can.yaml (explicit IDs, CAN FD, multiplexing) and tractor/ (a map in two files).

Documentation

  • Map format: every field, the rules, included files, versioning.
  • Command line: commands, validation, generated code, document customization, DBC import.
  • Web editor: the app, browser mode and its security, keyboard shortcuts, HTTP API.
  • VS Code extension: features, settings, commands.
  • PDF templates: ESKD/GOST details, logos, fonts, custom templates.
  • CI: validating maps and building outputs in a pipeline.
  • Contributing and Architecture: setup, tests, releases, how the code is organized.

Roadmap

The 1.0 milestone holds what comes before the format is declared stable. Next is a live bus: adapters, log decoding and replay, a monitor of signal values and a simulator (dashboard issues). Ideas and bug reports are welcome in issues.

License

mapcan is free and open source under the Apache License 2.0, copyright 2026 Ali Ordu (NOTICE). Files generated from your map (code, DBC, documents) are yours to use under any terms, including closed-source firmware. The format specification is under CC BY 4.0, and the JSON Schema and the examples under CC0 1.0: anyone may build tools for the format. Bundled components are listed in THIRD_PARTY_NOTICES.md.

If mapcan helps your project, a star or a citation (CITATION.cff) is much appreciated.

Metadata

Release files for mapcan 0.22.0

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

Source distribution (sdist)

Source distribution for mapcan 0.22.0
File Size Uploaded
mapcan-0.22.0.tar.gz 5.1 MB Details

Built distribution (wheel)

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

Total release size: 7.1 MB

Release files / mapcan-0.22.0.tar.gz

Download URL mapcan-0.22.0.tar.gz
Size 5.1 MB
Tags Source
SHA-256 checksum
How to use checksums
098c77c2beef7991ce5a9b4e21b0dc0879fa29b2c47db8e368d52ebede7e140e
BLAKE2b-256 checksum
How to use checksums
5ff9c2c8490bc93b9a83c49898ed6d5cac8e0e22250892e893804425ec0213b8
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 Oct 14, 2026.

Transparency log

Release files / mapcan-0.22.0-py3-none-any.whl

Download URL mapcan-0.22.0-py3-none-any.whl
Size 2.0 MB
Tags Python 3
SHA-256 checksum
How to use checksums
d661acefd8dd4b36ba63a268f0fe57eb609074b18c1fa2c22b4c16f7c45fd1bc
BLAKE2b-256 checksum
How to use checksums
2b030e195b680087bb99c6b9a3e031069794e1ab3180af563e1973bf5bc7a644
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 Oct 14, 2026.

Transparency log

Release history Release notifications | RSS feed

0.23.1

2 release files

0.23.0

2 release files

This release

0.22.0 This release

2 release files

0.21.1

2 release files

0.21.0

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