bad839934dcf7212cfe696c10661148e7f34b51d
VidBee
A minimal Electron downloader for video and audio
Built with Electron, React, TypeScript, Tailwind CSS, and shadcn/ui.
Features
- Download single videos, audio-only tracks, or entire playlists through a unified flow.
- Queue multiple jobs with progress tracking, pause, resume, retry, and download history.
- Detect platform-friendly formats automatically and store files in custom locations.
- Quick actions for popular sites plus manual URL entry for anything yt-dlp supports.
- Theme toggle (system, light, dark) and localized interface in English and Simplified Chinese.
- Desktop-native touches such as tray integration, update checks, and persistent settings.
Tech Stack
- Runtime: Electron 38, electron-vite, electron-builder.
- Frontend: React 19, React Router, Jotai, React Hook Form, Tailwind CSS 4, shadcn/ui, Lucide icons.
- Tooling: TypeScript 5, pnpm, Biome, dayjs, electron-log, electron-store, electron-updater, i18next, next-themes.
Getting Started
Prerequisites
- Node.js 18 or newer
- pnpm 8 or newer
Install dependencies
pnpm install
Run the app in development
pnpm dev
The Electron app and Vite dev server launch together with hot module replacement.
Useful Scripts
| Command | Description |
|---|---|
pnpm dev |
Run the Electron and Vite development environment. |
pnpm start |
Preview the production build locally. |
pnpm run typecheck |
Type-check the main and renderer projects. |
pnpm build |
Run type checks and produce production bundles. |
pnpm build:win / pnpm build:mac / pnpm build:linux |
Create platform-specific distributables. |
pnpm build:unpack |
Produce unpacked output directories. |
pnpm run check |
Format and lint the codebase with Biome. |
Project Structure
src/
├─ main/ # Electron main process, IPC services, configuration
├─ preload/ # Context bridge and preload helpers
└─ renderer/
├─ src/
│ ├─ pages/ # Application routes (Home, Settings, Playlist, etc.)
│ ├─ components/ # UI components, download views, shared controls
│ ├─ data/ # Static datasets such as popularSites.ts
│ ├─ hooks/ # Custom hooks and global atoms
│ ├─ lib/ # Utilities shared across the renderer
│ └─ assets/ # Global styles and icons
└─ index.html
Internationalization
The renderer uses i18next with English (en) and Simplified Chinese (zh-CN) namespaces. Update strings in src/renderer/src/locales/en.json; other locales are maintained separately.
Configuration and Storage
- Persistent settings are stored with
electron-storeand exposed through IPC helpers. - User-facing preferences such as download paths and themes live in
src/main/settings.tsand related services. - Logs are recorded with
electron-logto simplify troubleshooting.
Packaging
Run one of the following commands after a successful build:
pnpm build:win
pnpm build:mac
pnpm build:linux
Artifacts are generated under dist/. Use pnpm build:unpack to create unpacked directories for manual inspection.
Contributing
Issues and pull requests are welcome. Keep changes focused, document user facing updates, and run pnpm run check before opening a PR.
License
This project is distributed under the MIT License. See LICENSE for details.
Thanks
Languages
TypeScript
92.3%
JavaScript
4.7%
CSS
2.9%
HTML
0.1%