2026 · Desktop Tool · Local-first Developer Experience

Free
Rider

API를 확인하기 위해 계정을 만들고 워크스페이스를 서버에 올리는 대신, 요청 작성부터 명세 동기화·실시간 통신·Git 기록까지 로컬에서 끝내는 Electron API 클라이언트를 만들었습니다. 기능을 늘리는 것보다 개발자가 반복해서 옮겨 다니는 작업을 한 흐름으로 묶는 데 초점을 맞췄습니다.

RuntimeElectron
ContractOpenAPI 3.x
ScriptQuickJS Worker
DistributionHomebrew · GitHub Releases

API 개발에서는 요청을 보내는 일 자체보다 주변 작업이 더 자주 반복됩니다. 환경별 값을 바꾸고, 로그인 응답에서 토큰을 꺼내 다음 요청에 넣고, OpenAPI가 바뀌면 컬렉션과 차이를 확인하고, 검토한 결과를 Git에 남겨야 합니다. SSE나 WebSocket을 확인할 때는 다시 다른 도구를 켜게 됩니다.

이 흐름을 클라우드 워크스페이스가 아니라 로컬 파일과 로컬 실행을 기준으로 묶었습니다. 서버 계정이 없어도 바로 시작하고, 팀에 공유할 것은 컬렉션과 명세 같은 파일로 남기도록 경계를 정했습니다.

Product thesis

API 클라이언트의 가치는 요청 버튼이 아니라, 요청 전후의 반복 작업을 얼마나 줄이는가에 있다고 봤습니다.

01 · REQUEST

환경과 실행 상태 분리

dev·staging·prod 같은 Environment는 읽기 전용 값으로 두고, 요청·컬렉션 범위의 Vars와 실행 중 캡처 값을 별도로 관리합니다. 로그인 토큰처럼 다음 요청에서 이어지는 값은 런타임 상태로 다룹니다.

02 · SCRIPT

전역 전후처리

모든 요청에 적용할 전처리·후처리를 작성하고 QuickJS Worker 안에서 시간과 메모리 제한을 둬 실행합니다. 파일·셸·임의 네트워크 접근은 노출하지 않았습니다.

03 · OPENAPI

변경을 바로 덮어쓰지 않는 동기화

OpenAPI 3.x JSON/YAML을 연결하면 먼저 변경 검토 화면을 만들고 breaking change와 충돌을 분류합니다. 현재 값 유지·명세 값 반영을 선택한 뒤 체크한 엔드포인트만 적용하며 직전 동기화는 복원할 수 있습니다.

04 · REALTIME

SSE · WebSocket 콘솔

REST 요청과 같은 앱에서 SSE와 WebSocket 연결을 열고 메시지 흐름을 확인합니다. 실시간 기능만 확인하기 위해 별도 클라이언트로 이동하는 단계를 줄였습니다.

명세 검토를 사람과 Agent가 같은 규칙으로 수행

OpenAPI 변경 검토 흐름은 UI뿐 아니라 MCP 인터페이스에도 노출했습니다. Agent가 변경 목록을 읽고 검토하더라도 실제 반영 전에는 같은 충돌·선택 규칙을 거치도록 해, 자동화가 앱의 상태 모델을 우회하지 않게 했습니다.

ConnectOpenAPI 파일 또는 URL 연결
Review추가·변경·삭제·breaking change와 충돌 확인
Apply선택한 엔드포인트만 워크스페이스에 반영
Commit최신 diff를 다시 확인한 뒤 컬렉션 변경을 Git에 기록

Electron renderer가 직접 파일·Git·네트워크 권한을 모두 갖게 두지 않고 main process의 IPC 경계를 통해 필요한 기능만 노출했습니다. 워크스페이스는 로컬에 저장하고 민감 값은 공유 컬렉션 파일에서 분리합니다.

전후처리 스크립트는 앱 프로세스 안에서 그대로 eval하지 않고 Worker의 QuickJS 런타임에서 제한된 API만 제공합니다. OpenAPI 동기화도 새 명세를 곧바로 덮어쓰지 않고, 비교 결과를 중간 상태로 만들어 사용자의 결정 이후 저장합니다.

Boundary principle

로컬-first는 권한을 크게 열어두는 뜻이 아니라, 파일·스크립트·Git·네트워크 권한을 사용자가 이해할 수 있는 작업 단위로 나누는 방식으로 구현했습니다.

ElectronJavaScriptOpenAPIQuickJSGitSSEWebSocketMCP

macOS Apple Silicon과 Intel 빌드를 GitHub Releases로 배포하고 Homebrew Cask 설치 경로를 제공했습니다. 릴리즈 워크플로가 새 버전의 Cask 버전과 SHA-256을 갱신하도록 연결해 코드가 완성된 뒤의 배포 작업도 자동화했습니다.

Electron smoke test는 임시 워크스페이스·임시 Git 저장소·테스트 HTTP 서버를 사용해 실제 사용자 데이터와 분리했습니다. 요청 실행과 저장, 명세 동기화, Git 흐름을 기능 단위가 아니라 실제 앱 경계에서 검증하는 쪽을 택했습니다.

Install

Homebrew Cask와 GitHub Releases로 설치 경로 제공

Release

아키텍처별 빌드와 Cask 갱신을 릴리즈 파이프라인에 연결

Policy

공식 기능은 유료 등급 없이 공개하고 AGPL-3.0-only로 소스 공개

Free Rider는 새로운 프로토콜을 발명한 프로젝트가 아닙니다. 대신 이미 개발자가 하던 요청·변수·명세·실시간 연결·Git 검토를 한 데이터 모델과 한 실행 흐름 안에 배치했습니다.

그 과정에서 데스크톱 앱의 권한 경계, 명세 변화의 안전한 반영, 로컬 파일과 자동화 Agent가 함께 쓰는 인터페이스, 설치·업데이트까지 포함한 배포 운영을 한 제품 안에서 다뤘습니다.

What this project shows

반복 작업을 하나의 로컬 개발 워크플로우로 묶는 제품 설계

API 요청 화면을 만드는 데서 멈추지 않고 OpenAPI 변화 검토, 스크립트 실행 경계, 실시간 통신, Git 기록과 배포까지 연결했습니다.

Free Rider 문서 보기 ↗