GitHunt
DI

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.


Watch Video Preview


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 install

Development

Start the development server:

npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun run dev

This 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:unpack

Distribution 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 Alt key
  • 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