The Problem

Developers need a self‑hosted API client that works offline, integrates with Git for version‑controlled collections, and supports multiple protocols (HTTP, WebSocket, etc.). Existing tools (Postman, Insomnia) rely on cloud sync or lack deep Git integration, forcing teams to manage request definitions manually.

What This Does

echolon is an Electron‑based desktop app that stores collections, environments, and request history locally (see core/main/fileStorage.ts). Git operations (clone, commit, push) are wrapped in core/main/git.ts, letting teams treat their workspace like any other code repo. The UI lives in core/renderer/ – for example core/renderer/App.tsx boots the React tree, while core/renderer/components/panels/CenterPanel/ResponseViewer.tsx renders responses with syntax highlighting.

Importers (core/renderer/services/SpecImporter.ts) can ingest OpenAPI or Postman files, turning them into native collections. Request execution is handled by core/renderer/services/RequestService.ts (function execute), which builds a request (buildUrl, buildHeaders, buildBody) and dispatches it via the Electron‑provided browserFetch bridge.

How It Is Wired

Entry point – The Electron main process starts at core/main/index.ts (line 28). It creates the app window, registers IPC handlers (preload.ts), and calls init in core/main/git.ts (line 103) to initialise the Git client and local storage.

Core flow for a request

  1. UI component (RequestCard.tsx) triggers useRequest → execute (core/renderer/services/RequestService.ts:379).
  2. execute calls buildUrl, buildHeaders, buildBody (each referenced >30 times across the codebase).
  3. The assembled request is sent through the Electron bridge to browserFetch, which ultimately invokes the native fetch API (network outbound).

Filesystem interaction – core/main/fileStorage.ts (75 functions) is the only module that reads/writes persisted data (e.g., writeJsonFile during init). Calls to it originate from 14 other files, making it a high‑blast‑radius storage hub.

Git integration – core/main/git.ts (28 functions) performs network calls (git.fetch) and file writes (repo init). It is imported by 9 modules, so any change here impacts version‑control features across the app.

Service hubs – The import graph shows three highly unstable modules:

  • core/renderer/components/ui/index (imports 25 others, instability 0.96)
  • core/renderer/services/index (imports 18, instability 0.95)
  • core/renderer/contexts/index (imports 15, instability 0.94)

These act as “hub” modules; modifications ripple widely and increase merge risk.

Unmapped wiring – No circular dependencies were detected, but many UI panels (e.g., ResponseViewer.tsx, RequestCard.tsx) exhibit deep nesting (up to 10 levels) and oversized files (over 1500 lines), which hampers readability and future refactoring.

How To Use It

# Clone the repo
git clone https://github.com/moses-y/echolon
cd echolon/core

# Install dependencies (Node 18+ required)
npm install

# Run the development server (Electron window)
npm run dev

To build distributables:

# All platforms
npm run package:all

# macOS only
npm run package:mac

No additional configuration files are required for a basic run. Optional code‑signing variables are documented in the README (e.g., CSC_LINK, CSC_KEY_PASSWORD).

Real‑World Use

A team stores its collection JSON in a Git repo (/my-workspace). Each developer runs the Electron app, edits requests, and commits changes via the built‑in Git UI. Because the data lives locally, work continues offline; once back online, git push synchronises the collection with teammates, preserving a full history of request evolution.

Code Health & Issues

  • High – CI missing – 205 source files, no GitHub Actions workflow.
  • Medium – Dependabot absent – 5 manifest files, no update bot.
  • Medium – Large binaries – core/tests/GitHub v3 REST API.postman_collection.json (9 MB) and Asana.postman_collection.json (6.7 MB) should be moved to Git LFS or external storage.
  • Medium – Test coverage – 1 test file vs 205 source files (0.5 % coverage).
  • Low – Repository conventions – No .editorconfig, .gitattributes, or formatter config.

The Bottom Line

echolon delivers a fully local, Git‑backed API client with a rich Electron UI, but the codebase suffers from high cognitive load (deeply nested, oversized components) and minimal automation (no CI, sparse tests). It is suitable for teams comfortable managing a monolithic Electron project and willing to invest in refactoring and CI setup.