Skip to content

Latest commit

 

History

140 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Embedded32

An open-source TypeScript platform for learning and experimenting with embedded runtimes, CAN communication, SAE J1939, ECU simulation, diagnostics, and connected vehicle concepts.

Current project status

Area Status
Release v1.0.0 monorepo packages (npm publish requires maintainer approval)
Maturity Active development - suitable for learning, labs, and prototyping
Testing Core J1939 and runtime libraries have unit tests; some packages have minimal coverage
Documentation apps/site/ Next.js site - local dev ready; GitHub Pages workflow ships on main (live URL after owner enables Pages)
Certification Not automotive-certified, safety-certified, or claimed SAE-compliant

Embedded32 is a teaching and experimentation platform. It is not positioned as a production-grade replacement for professional CAN tools or a complete J1939 implementation.

Who Embedded32 is for

  • Students learning embedded systems, CAN, and vehicle networks without buying hardware first
  • Instructors building hardware-free or optional-SocketCAN lab modules
  • Developers prototyping ECU messaging, simulation, and CAN-to-MQTT bridges in TypeScript
  • Contributors who want a modular npm monorepo to extend with labs, docs, and examples

What students can learn

  • CAN identifiers, frames, payloads, filtering, and logging
  • J1939 concepts: PGN, SPN, source address, priority, encoding and decoding (subset)
  • Multi-ECU simulation on a shared virtual bus
  • Runtime scheduling, modules, and message buses
  • Diagnostic messages (DM1/DM2 subset) and fault observation
  • Bridging CAN traffic to UDP/TCP/MQTT for connected-systems labs

Core capabilities

Capability Packages
CAN abstraction (mock, virtual, SocketCAN) @embedded32/can
J1939 parse/decode/transport subset @embedded32/j1939
Embedded runtime and scheduler @embedded32/core, @embedded32/supervisor
Multi-ECU vehicle simulation @embedded32/sim
CAN ↔ Ethernet/MQTT bridging @embedded32/bridge, @embedded32/ethernet
CLIs for runtime and tooling @embedded32/cli, @embedded32/tools
JavaScript client SDK @embedded32/sdk-js
Web dashboard (private, dev-only) @embedded32/dashboard

Documentation site

Run the Next.js docs site locally after npm ci and npm run docs:api:

cd apps/site
npm run dev

Open http://localhost:3000 for guides, labs, packages, and API reference.

The site deploys to GitHub Pages via .github/workflows/deploy-pages.yml. After the owner enables Pages, it is served at https://mukesh-scs.github.io/Embedded32/. See docs/deployment/GITHUB_PAGES.md.

Browser demo

An interactive, client-side CAN/J1939 demo lives at /demo on the documentation site (source in apps/demo/). It plays synthetic traces and decodes a teaching subset of messages entirely in the browser - no server, WebSocket, or hardware required.

Fifteen-minute quickstart

No CAN hardware required. From a clean clone:

git clone https://github.com/Mukesh-SCS/Embedded32.git
cd Embedded32
npm ci
npm run build

1. Decode a J1939 message

npx tsx examples/j1939-basic.ts

2. Run a multi-ECU simulation

npx embedded32-tools simulate vehicle/basic-truck

3. Use the runtime demo (optional dashboard)

npx embedded32 demo

See the full walkthrough: docs/getting-started.md

Package selection

Goal Start here
Learn CAN basics @embedded32/can
Parse/decode J1939 @embedded32/j1939
Simulate multiple ECUs @embedded32/sim + @embedded32/tools
Build a small runtime @embedded32/core + @embedded32/supervisor
Bridge to MQTT/Ethernet @embedded32/bridge + @embedded32/ethernet
App integration @embedded32/sdk-js

Full guide: docs/package-guide.md

Architecture overview

flowchart TB
  subgraph apps [Applications]
    CLI["@embedded32/cli"]
    Tools["@embedded32/tools"]
    SDK["@embedded32/sdk-js"]
  end
  subgraph runtime [Runtime]
    SUP["@embedded32/supervisor"]
    CORE["@embedded32/core"]
  end
  subgraph protocol [Protocol]
    J1939["@embedded32/j1939"]
    CAN["@embedded32/can"]
  end
  subgraph connect [Connectivity]
    BR["@embedded32/bridge"]
    ETH["@embedded32/ethernet"]
  end
  SIM["@embedded32/sim"]
  CLI --> SUP
  Tools --> SIM
  SDK --> J1939
  SUP --> CORE
  SUP --> BR
  SIM --> J1939
  J1939 --> CAN
  BR --> ETH
  BR --> J1939
  CORE --> CAN
Loading

Details: docs/architecture.md

Hardware-free usage

  • MockCANDriver and VirtualCANPort in @embedded32/can
  • SimulationRunner and vehicle profiles in @embedded32/sim
  • embedded32-tools simulate for decoded traffic in the terminal
  • Examples under examples/ and package examples/ directories
  • Browser demo at /demo on the docs site (apps/demo/) with synthetic traces

Hardware-supported usage

Platform Interface Notes
Linux / WSL SocketCAN (vcan0, can0) Full driver support when socketcan module is installed
Raspberry Pi SocketCAN, optional GPIO via onoff Documented in package READMEs
Windows PCAN or gateway Often via bridge/gateway rather than direct SocketCAN
macOS Simulation Use mock/virtual paths for development

SocketCAN setup is optional for courses - see docs/getting-started.md.

Educational labs

Four classroom labs ship under labs/:

  1. CAN communication basics
  2. J1939 messaging
  3. Multi-ECU simulation
  4. Diagnostics and fault injection

Lab catalog: labs/README.md

Documentation

Document Description
docs/getting-started.md 15-minute hardware-free quickstart
docs/package-guide.md Which package to install
docs/architecture.md System architecture
docs/concepts/ CAN, J1939, simulation, diagnostics, bridge
docs/api/ Generated TypeDoc reference (npm run docs:api)
docs/maintainers/monorepo-workflow.md Build, test, verify commands

Contributing

Contributions are welcome - documentation, labs, tests, and packaging improvements are especially helpful.

Project roadmap

Milestone Focus Status on upgrade branch
v1.0.x npm reliability, CI, docs, release, citation Phases 1–13 complete; owner actions for npm/Pages/DOI
v1.1 Labs, instructor guides, traces Core materials shipped
v1.2 Documentation site and browser demo Built; Pages deploy pending owner
v1.3 Community pilots and expanded labs Planned

Full milestone detail, phase matrix, and owner checklist: ROADMAP.md and docs/maintainers/open-source-upgrade-summary.md.

Citation

If you use Embedded32 in academic work, see docs/citation.md.

Machine-readable metadata: CITATION.cff. A Zenodo DOI badge will be added after the first archived release - see docs/maintainers/zenodo-release.md. Do not cite a DOI until it appears in those files.

License

MIT License - see LICENSE.

Security reporting

Report vulnerabilities privately - see SECURITY.md.
Do not post exploit details in public issues.

Maintainer information

About

Open-source platform for learning, developing, simulating, and testing CAN and SAE J1939 systems. Includes embedded runtimes, protocol libraries, SDKs, CLI tools, browser-based demos, and virtual ECU simulation.

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages