An open-source TypeScript platform for learning and experimenting with embedded runtimes, CAN communication, SAE J1939, ECU simulation, diagnostics, and connected vehicle concepts.
| 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.
- 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
- 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
| 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 |
Run the Next.js docs site locally after npm ci and npm run docs:api:
cd apps/site
npm run devOpen 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.
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.
No CAN hardware required. From a clean clone:
git clone https://github.com/Mukesh-SCS/Embedded32.git
cd Embedded32
npm ci
npm run build1. Decode a J1939 message
npx tsx examples/j1939-basic.ts2. Run a multi-ECU simulation
npx embedded32-tools simulate vehicle/basic-truck3. Use the runtime demo (optional dashboard)
npx embedded32 demoSee the full walkthrough: docs/getting-started.md
| 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
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
Details: docs/architecture.md
MockCANDriverandVirtualCANPortin@embedded32/canSimulationRunnerand vehicle profiles in@embedded32/simembedded32-tools simulatefor decoded traffic in the terminal- Examples under
examples/and packageexamples/directories - Browser demo at
/demoon the docs site (apps/demo/) with synthetic traces
| 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.
Four classroom labs ship under labs/:
- CAN communication basics
- J1939 messaging
- Multi-ECU simulation
- Diagnostics and fault injection
Lab catalog: labs/README.md
| 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 |
Contributions are welcome - documentation, labs, tests, and packaging improvements are especially helpful.
- Read CONTRIBUTING.md
- Run
npm run verifybefore opening a pull request - Report bugs via GitHub Issues
| 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.
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.
MIT License - see LICENSE.
Report vulnerabilities privately - see SECURITY.md.
Do not post exploit details in public issues.
- Maintainer: Mukesh Mani Tripathi
- Repository: https://github.com/Mukesh-SCS/Embedded32
- npm scope:
@embedded32/*(publish controlled by maintainers)