The Problem

Recordly addresses the pain point of creating polished demo videos without requiring editing skills. Raw screen capture footage typically needs separate motion design work for cursor polishing, zoom emphasis, and styled framing—workflow that's costly and slow for individual creators and small teams.

What This Does

Recordly is a cross-platform desktop application (macOS, Windows, Linux) for recording and editing screen captures with built-in motion tools. The codebase is split between src/ (447 files, React/TypeScript frontend) and electron/ (135 files, native capture and IPC handling). Recording uses native backends: macOS leverages ScreenCaptureKit helpers in electron/native/, Windows uses Windows Graphics Capture (WGC) with WASAPI audio support via electron/native/windows-capture/, and Linux relies on Electron capture APIs. The editor features timeline drag-drop trimming, zoom regions, speed controls, annotations, and a community-driven extension system defined in src/lib/extensions/. Exporter logic lives in src/lib/exporter/ including modernFrameRenderer.ts (103 functions), modernVideoExporter.ts (69 functions), and frameRenderer.ts (53 functions), with native video export handled by electron/ipc/export/native-video.ts (122 functions, 16 classes/types) which interfaces with C++ capture modules.

How It Is Wired

Execution enters through electron/main.ts at focusOrCreateMainWindow (reaches 30 functions, called from 2 places) and sendEditorMenuAction (reaches 18 functions, called from 1 place). From there, electron/ipc/state.ts (55 functions) manages recording state via setSelectedSource, setCurrentRecordingSession, and similar IPC handlers. The call graph shows cn called from 71 places, clamp from 42, and on from 36—these are the most widely reached utilities. The most connected hub is src/components/video-editor/types (45 importers, 0 exports, instability 0), while src/components/video-editor/VideoEditor has high instability (0.94) with 2 importers and 29 exports, making it a churn point. A critical import cycle exists in src/components/video-editor/timeline/TimelineEditor.tsx. Paths to filesystem exits: focusOrCreateMainWindow -> createWindow -> createHUDOverlayWindow -> loadHUDOverlayCaptureProtectionSetting via fs.readFileSync. The export pipeline flows through electron/ipc/export/native-video.ts which calls into C++ modules (wgc-capture, nvidia-cuda-compositor, cursor-monitor) and reads/writes export sessions.

How To Use It

Setup: No build dependencies are specified beyond what's in package.json (npm). Clone with git clone https://github.com/moses-y/Recordly.

Configuration: No environment variables or keys are documented in the structure. The repo is AGPL-3.0 open source.

Running it: Launch the Electron app via npm start (implied by package.json). The entry point is electron/main.ts.

Real-World Use

A creator records a screen walkthrough, then uses the timeline editor in src/components/video-editor/ to trim sections, add automatic zoom regions based on cursor activity, insert webcam overlay bubbles positioned via presets, and apply a styled frame with blur and shadows. The project saves as a .recordly file preserving editor state. Exported MP4 output runs through modernVideoExporter.ts and native C++ modules for hardware-accelerated encoding.

Code Health & Issues

[CRITICAL] Keep secrets out of workflows a fork can trigger - .github/workflows/winget-releaser.yml contains WINGET_ACC_TOKEN (publish or cloud scope), so a pull request becomes credential exfiltration risk.

[HIGH] Pin third-party GitHub Actions to a commit SHA - .github/workflows uses @vN references (e.g., vedantmgoyal9/winget-releaser@v2) that can move, causing unpredictable action execution with secrets.

[HIGH] Make CI invoke the test suite it has - 91 test files exist but no test command appears in the 4 GitHub Actions workflows read, making green checks meaningless.

[HIGH] Open a pull request instead of pushing to the default branch - homebrew-tap.yml forces git push --force-with-lease origin "$BRANCH" which lands automated commits on the deploying branch with no tests having run.

[MEDIUM] Declare least-privilege permissions for GITHUB_TOKEN - 1 workflow declares no permissions, 1 references secrets, inheriting repository defaults.

[MEDIUM] Enable Dependabot or Renovate - 1 manifest present, no update bot configured; across 1,322 repositories in the sample this means advisories go unpatched.

[MEDIUM] Gate pull requests on a dependency vulnerability scan - no dependency scan in CI; this is the one gate that would catch known-vulnerable packages before build.

[MEDIUM] Move large binaries to Git LFS or out of the repository - 3 blobs over 5MB: feature1.gif 8.5MB, feature2.gif 6.7MB, lemonade.jpeg 5.7MB; every clone and CI checkout pays for undiffed data.

[MEDIUM] Set persist-credentials: false on checkout - build.yml checkout keeps the token; dependencies install with a pushable credential available to later steps.

The Bottom Line

Recordly is a functional cross-platform demo video tool with a solid native capture foundation and an extensible editor, but its CI hygiene is weak—secrets are within fork reach, tests never run on pull requests, and third-party Actions aren't pinned. Teams needing quick, polished demo production will find value here, especially if they can tolerate the SDLC gaps; others should pin dependencies, add a test step, and move the winget token into a workflow_run job before merging contributions.