d18ada4ee7
Docker Publish / docker (web, apps/web/Dockerfile, web) (push) Failing after 0s
Docker Publish / docker (api, apps/api/Dockerfile, api) (push) Failing after 1s
Publish Extension / detect-version (push) Has been skipped
Publish Extension / submit (push) Has been cancelled
5.5 KiB
5.5 KiB
Contributing to VidBee
Thank you for taking the time to improve VidBee. These notes keep the project maintainable and easy to review.
Getting Ready
- Use Node.js 18+ and pnpm 8+.
- Install dependencies with
pnpm install. - Run
pnpm devto test changes locally.
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.
Local Development
- Use
pnpm installto pull dependencies after cloning. - Start the Electron and Vite development environment with
pnpm dev; hot module replacement is already configured. - Preview the production build locally with
pnpm start.
Useful Scripts
| Command | Purpose |
|---|---|
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 for inspection. |
pnpm run check |
Format and lint the codebase with Biome. |
Project Structure
apps/desktop/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
- i18next drives localization with English (
en) and Simplified Chinese (zh-CN) namespaces. - Only update strings in
apps/desktop/src/renderer/src/locales/en.json; maintainers handle the other locales. - Keep copy edits focused and avoid removing translation keys without discussion.
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
apps/desktop/src/main/settings.tsand related services. - Logs are recorded with
electron-logto simplify troubleshooting.
Packaging
- Build production bundles with
pnpm build. - Create platform-specific artifacts with
pnpm build:win,pnpm build:mac, orpnpm build:linux. - Use
pnpm build:unpackto generate unpacked directories underapps/desktop/dist/for manual inspection. - Bundle
yt-dlpunderapps/desktop/resources/andffmpeg/ffprobeunderapps/desktop/resources/ffmpeg/before packaging so merges and audio extraction work out of the box.
Releasing & Update Channels
VidBee ships two auto-update channels. Auto-updates use the GitHub provider
(apps/desktop/electron-builder.yml); electron-builder derives the channel from the
version's prerelease label, so the tag is the single source of truth.
| Channel | Lane | Command | Tag / version | electron-builder output | GitHub release |
|---|---|---|---|---|---|
| Stable | latest |
pnpm release |
vX.Y.Z |
latest*.yml |
normal release |
| Preview | preview |
pnpm release:preview |
vX.Y.Z-preview.N |
preview*.yml |
prerelease |
- Both commands run
pnpm run checkand thenbumpp, which bumpsapps/desktop/package.json, commits, tags, and pushes. The tag push triggers.github/workflows/release.yml, which builds every platform, publishes the GitHub release (marked prerelease for-preview.tags), and notifies Cloudflare Pages for stable releases only. - Before building, CI runs
apps/desktop/scripts/stamp-release.mjs(seebuild.yml): it stamps the tag's version intopackage.jsonand, for-preview.tags, sets the electron-builder publish channel so the build emitspreview*.ymlinstead oflatest*.yml. (The GitHub provider does not derive the channel from the version on its own, so this is required.) - A manual
workflow_dispatchrun of the release workflow is a build-only smoke test: it produces artifacts but does not publish a release (no tag).
Users opt into preview builds with the Preview channel switch on the in-app About page
(betaProgram setting). Turning it on moves the user to the preview channel and downloads the
next prerelease; turning it off returns them to latest but keeps their current build until the
next stable release catches up (no forced downgrade).
Working on Changes
- Keep each pull request focused on a single problem or feature.
- Run
pnpm run checkbefore committing to ensure formatting and linting stay consistent. - Write comments and console messages in English only.
- When updating copy in the app, adjust strings in
apps/desktop/src/renderer/src/locales/en.json; other locale files are handled by maintainers.
Opening Issues
- Search existing issues to avoid duplicates.
- Describe the problem clearly with steps to reproduce, expected behaviour, and screenshots or logs when useful.
Submitting Pull Requests
- Explain the motivation and impact of the change in the description.
- Mention any user facing updates or migrations.
- Confirm that
pnpm run checkpasses and note any follow-up work that is out of scope.
We appreciate every contribution that keeps VidBee simple and reliable.