dielect/electron-react-app
Modern Electron application starter kit with React, Vite, TypeScript, and TailwindCSS
Electron React App
A modern Electron application template with React, Vite, TypeScript, and TailwindCSS. This project provides a solid foundation for developing cross-platform desktop applications.
Features
- ๐ Electron - Cross-platform desktop application framework
- โ๏ธ React - Component-based UI library
- ๐ฆ TypeScript - Type-safe JavaScript
- ๐จ TailwindCSS - Utility-first CSS framework
- โก Vite - Lightning-fast build tool
- ๐ฅ Fast HMR - Hot Module Replacement
- ๐จ Dark/Light Mode - Built-in theme switching
- ๐ช Custom Window & Titlebar - Professional-looking window with custom titlebar & file menus.
- ๐ Clean Project Structure - Separation of main and renderer processes
- ๐งฉ Path Aliases โ Keep your code organized.
- ๐ ๏ธ Electron Builder - Configured for packaging applications
Prerequisites
- Node.js (v18 or higher)
- npm, yarn, pnpm, or bun
Installation
Clone the repository and install dependencies:
# Clone the repository
git clone https://github.com/guasam/electron-react-app
cd electron-react-app
# Install dependencies
npm install
# or
yarn
# or
pnpm install
# or
bun installDevelopment
Start the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun run devThis will start Electron with hot-reload enabled so you can see changes in real time.
Building for Production
Build the application for your platform:
# For Windows
npm run build:win
# For macOS
npm run build:mac
# For Linux
npm run build:linux
# Unpacked for all platforms
npm run build:unpackDistribution files will be located in the dist directory.
IPC Communication
The app uses a secure IPC (Inter-Process Communication) system to communicate between the renderer and main processes:
// Renderer process (send message to main)
window.api.send('channel-name', ...args)
// Renderer process (receive message from main)
window.api.receive('channel-name', (data) => {
console.log(data)
})
// Renderer process (invoke a method in main and get a response)
const result = await window.api.invoke('channel-name', ...args)Custom Window Components
This template includes a custom window implementation with:
- Custom titlebar with app icon
- Window control buttons (minimize, maximize, close)
- Menu system with keyboard shortcuts
- Dark/light mode toggle
- Cross-platform support for Windows and macOS
Titlebar Menu Toggle
The titlebar menu can be toggled using:
- Windows: Press the
Altkey - macOS: Press the
Option (โฅ)key
When you press the toggle key:
- If the menu is hidden, it becomes visible
- If the menu is already visible, it gets hidden
- The menu only toggles if menu items are available
Customizing Menu Items
To add, remove or modify menu items, update the lib/window/titlebarMenus.ts file.
Tailwind Styling
The project supports TailwindCSS for styling:
// Example component with Tailwind classes
const Button = () => (
<button className="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600">
Click me
</button>
);Contributing
Contributions are welcome! Feel free to submit a Pull Request.
Project Structure
โโโ app/ # Renderer process files
โ โโโ assets/ # Static assets (images, fonts, etc)
โ โโโ components/ # React components
โ โ โโโ App.tsx # Application component
โ โโโ styles/ # CSS and Tailwind files
โ โ โโโ app.css # App stylesheet
โ โ โโโ tailwind.css # Tailwind stylesheet
โ โโโ index.html # Entry HTML file
โ โโโ renderer.tsx # Renderer process entry
โโโ lib/ # Shared library code
โ โโโ main/ # Main process code
โ โ โโโ index.ts # Main entry point for Electron
โ โ โโโ ... # Other main process modules
โ โโโ preload/ # Preload scripts for IPC
โ โ โโโ index.ts # Preload script entry
โ โ โโโ api.ts # Exposed API for renderer
โ โโโ welcome/ # Welcome kit components
โ โโโ window/ # Custom window implementation
โโโ resources/ # Build resources
โโโ .eslintrc # ESLint configuration
โโโ .prettierrc # Prettier format configuration
โโโ electron-builder.yml # Electron builder configuration
โโโ electron.vite.config.ts # Vite configuration for Electron
โโโ package.json # Project dependencies and scripts
โโโ tsconfig.node.json # Main process tsconfig
โโโ tsconfig.web.json # Renderer process tsconfig
