MCPcopy Create free account
hub / github.com/EdgeTX/buddy

github.com/EdgeTX/buddy @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
447 symbols 1,597 edges 209 files 0 documented · 0% updated 9d agolatest · 2026-08-18★ 6714 open issues

Browse by type

Functions 430 Types & classes 17
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

EdgeTX Buddy logo

Pipeline status Coverage code style: prettier

Helping you on your journey to EdgeTX

Development

Prerequisites

This application uses node-usb when running in electron. In order to compile the bindings some build libraries are required depending on platform. For MacOS and Windows, these should already be built in.

Linux

$ sudo apt-get install build-essential libudev-dev

This software is designed to run on node@20 which can be installed with Fast Node Manager

Devcontainer

This repository includes a devcontainer configuration that is intended to work from scratch.

  • Node.js version is sourced from .node-version
  • Container base image targets Ubuntu 22.04 to align with CI environments
  • Linux build prerequisites are installed in the container image (build-essential, libudev-dev, python3, python3-setuptools)
  • Corepack is enabled in the image build, and yarn install runs automatically on first container create
  • Husky pre-commit hooks are installed during dependency install and checked on container start

Default devcontainer setup is intentionally focused on lint/test/compile/commit workflows. e2e runtime dependencies (for example xvfb/playwright browsers) are not preinstalled by default.

Commands

Enable or install yarn package manager

# For Node.js <16.10
$ npm i -g corepack

# For Node.js >=16.10
$ corepack enable

Install deps

$ yarn

Developing

# Start electron and web environments in watch mode
$ yarn start

# Start web environment only
$ yarn start:web

# Storybook component environment
$ yarn storybook

Building

# Build and pack electron app (outputs renderer assets too)
$ yarn build

# Compile only web environment
$ yarn compile:web:production

Run tests

$ yarn test

Run e2e tests - requires web or app to be built

# Web app tests
$ yarn e2e:web
# Electron app tests
$ yarn e2e:app

Lint

$ yarn lint:all

# Or yarn lint <file>

Format (this codebase has enforced formatting with prettier)

$ yarn fmt

Extract new translation strings

$ yarn extract-locales

Translations

Translation strings are stored in the ./locales directory. To contribute a language which doesn't already exist:

  1. Add the ISO code to the ./locales/languages.json
  2. Extract the strings to the new language files (yarn extract-locales)
  3. Translate the strings for their equivilent meanings

The namespaces (common, flashing, etc), provide some context for what the strings relate to

Structure

The application is split into different contexts

  • Main: Electron Main Process - initialising the electron application, runs the backend when running in electron. Runs in a Node.JS context
  • Renderer: React Web Application - Runs in browser or electron renderer process. Shows different UI depending on context.
  • Shared: Multi-Context code - Designed to run in any environment. Imported by both Main or Renderer
  • Webworker: WebWorker Context - .bootstap files start-up .worker files. Code designed only to run in WebWorker contexts.

Communication

This application makes use of GraphQL to request data across process boundary. Meaning that the renderer process is always entirely separated from the GraphQL execution environment.

Apollo Bus Link is used to facilitate the communication between the GraphQL execution process in Electron or Webworker environments.

Electron architecture Webworker architecture

Exceptions

Within WebWorker contexts, there are some browser functions which cannot be invoked within WebWorker contexts and so have to be invoked in the main process. In order to keep things in Electron and Web processes similar a set of Cross Boundary Communication functions have been defined.

Acknowledgements

A massive thank you to the software which makes all of this possible. Specifically:

Screenshots

Screenshot of flashing

Extension points exported contracts — how you extend this code

browse all types & interfaces →

Core symbols most depended-on inside this repo

browse all functions →

Shape

Function 384
Method 46
Class 14
Interface 2
Enum 1

Languages

TypeScript100%

Modules by API surface

src/shared/dfu/index.ts47 symbols
src/shared/uf2/uf2.ts20 symbols
src/shared/backend/services/flashJobs.ts14 symbols
src/shared/backend/services/backupStore.ts13 symbols
src/renderer/stories/flashing/components/FlashJobTimeline.stories.tsx13 symbols
src/test-utils/mocks.ts12 symbols
src/shared/backend/services/sdcardJobs.ts10 symbols
src/renderer/components/firmware/DownloadCloudbuildButton.tsx10 symbols
src/shared/tools.ts9 symbols
src/shared/dfu/core.ts9 symbols
src/renderer/pages/backup/BackupRestoreFlow.tsx8 symbols
src/renderer/components/flashing/FlashJobTimeline.tsx8 symbols

For agents

$ claude mcp add buddy \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page