This is a modern monorepo template that combines Tauri for cross-platform desktop and mobile applications with Next.js for web development, all managed with pnpm workspaces and Turbo.
- ๐ Features
- ๐ Prerequisites
- ๐ ๏ธ Quick Start
- ๐ Project Structure
- ๐ฏ Available Commands
- ๐งฉ Adding shadcn/ui Components
- ๐ Internationalization (i18n)
- ๐ Release Process
- ๐ค Contributing
- ๐ License
- ๐ฅ๏ธ Cross-platform Desktop App - Built with Tauri and Next.js
- ๐ Web Application - Pure Next.js web app
- ๐ฆ Shared UI Components - shadcn/ui components shared across apps
- ๐ง Monorepo Setup - pnpm workspaces + Turborepo for optimal developer experience
- โ๏ธ Automated Setup - One-command project initialization
- โก Fast Development - Turbo + Next.js Turbopack for lightning-fast builds
- ๐จ Modern UI - Tailwind CSS + shadcn/ui components
- ๐ฑ Responsive Design - Works on all screen sizes
- ๐ Type Safety - Full TypeScript support
- ๐ Internationalization - Multi-language support with next-intl (10 languages included)
- ๐ CI/CD Ready - GitHub Actions with automated releases
Note
For detailed information you can refer to Tauri's official documents: Prerequisites
Before you begin, ensure you have the following installed:
- Node.js (v22 or higher) - Download
- pnpm (v8 or higher) - Install Guide
- Rust (latest stable) - Install Guide
Optional for Mobile Development:
First, create your own repository from this template:
-
Use this template: Click the "Use this template" button on GitHub, or fork the repository to create your own copy.
-
Configure GitHub Actions permissions: After creating your repository, go to:
SettingsโActionsโGeneralโWorkflow permissions- Enable "Read and write permissions"
- Enable "Allow GitHub Actions to create and approve pull requests"
Warning
If these options are grayed out, your organization or enterprise may have restricted these permissions. Check with your organization/enterprise settings first.
This configuration is required for release-please to automatically create release pull requests.
# Clone your repository
git clone https://github.com/YOUR_USERNAME/YOUR_REPO_NAME.git
cd YOUR_REPO_NAME
# Run the initialization script
.\init-project.ps1
# Install dependencies
pnpm install
# Start development
pnpm dev# Clone your repository
git clone https://github.com/YOUR_USERNAME/YOUR_REPO_NAME.git
cd YOUR_REPO_NAME
# Make the script executable and run it
chmod +x init-project.sh
./init-project.sh
# Install dependencies
pnpm install
# Start development
pnpm devThe initialization script will:
- โ Ask for your project name (lowercase, hyphens allowed)
- โ Ask for initial version (default: 0.1.0)
- โ Optionally update GitHub username references
- โ Update all configuration files automatically
- โ Optionally rewrite initial commit and create refactor commit
Important
After running the initialization script and pushing the refactor commit, release-please will automatically create a Pull Request titled something like chore: release master. DO NOT MERGE THIS PR YET! You must first complete Step 3 (Android signing configuration) or disable the Android build workflow, otherwise the GitHub Actions that build Android will fail.
Warning
This step is REQUIRED if you want to build Android apps. The GitHub Actions workflow includes Android builds by default. If you skip this step, the workflow will fail when you merge the release-please PR.
You have two options:
- Complete the Android signing setup (recommended if you plan to build Android apps)
- Disable the Android build in
.github/workflows/release.ymlby commenting out or removing the Android build jobs
If you plan to build Android apps, you need to set up the code signing. The codebase is already prepared for this signing; you just need to perform the following steps:
Note
For detailed information please checkout the official Tauri Android signing documentation to create your keystore. This is a summary.
Linux/macOS:
keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias uploadWindows (PowerShell):
keytool -genkey -v -keystore $env:USERPROFILE\upload-keystore.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias uploadWindows (CMD):
keytool -genkey -v -keystore "%USERPROFILE%\upload-keystore.jks" -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias uploadCreate a file named apps/native/src-tauri/gen/android/keystore.properties with your keystore information:
storePassword=<your store password defined when keytool was executed>
keyPassword=<your key password defined when keytool was executed>
keyAlias=<your key alias defined when keytool was executed>
storeFile=<location of the key store file, such as /Users/<user name>/upload-keystore.jks or C:\\Users\\<user name>\\upload-keystore.jks>Warning
Keep the keystore.properties file confidential. To prevent sensitive information from being stored, the file has been added to the .gitignore file.
Convert your keystore file to Base64 format:
Linux/macOS:
base64 -i ~/upload-keystore.jks -o keystore.base64.txtWindows (PowerShell):
certutil -encode upload-keystore.jks keystore.base64.txtWarning
The certutil command adds -----BEGIN CERTIFICATE----- and -----END CERTIFICATE----- headers to the output, which should be removed.
Add the following secrets to your GitHub repository:
- Go to:
SettingsโSecrets and variablesโActionsโRepository secrets - Click "New repository secret" and add these 5 secrets:
| Secret Name | Description | Example Value |
|---|---|---|
BASE64_JKS |
Base64-encoded keystore file content | (content from keystore.base64.txt) |
KEY_ALIAS |
Key alias set during keystore creation | upload |
KEY_PASSWORD |
Key password set during keystore creation | your-key-password |
STORE_FILE |
Keystore file name | ~/home/odest/upload-keystore.jks |
STORE_PASSWORD |
Store password set during keystore creation | your-store-password |
Warning
Never commit your keystore file or passwords to your repository. Always use GitHub Secrets for sensitive information.
After completing the Android signing setup (or disabling the Android build), you can now safely merge the release-please Pull Request:
- Go to your repository on GitHub
- Navigate to the Pull Requests tab
- Find the PR titled
chore: release mastercreated by release-please - Review the changes in the PR
- Click Merge pull request
Once merged, GitHub Actions will automatically:
- Build your desktop app (Windows, macOS, Linux)
- Build your Android app (if signing is configured)
- Create a new GitHub release with all binaries attached
Tip
If you don't plan to build Android apps immediately, you can disable the Android build in .github/workflows/release.yml and complete the signing setup later when needed.
You're all set! Now you can start developing your app:
# Desktop app development
pnpm tauri dev
# Web app development
pnpm --filter web dev
# Build for production
pnpm buildโโโ apps/
โ โโโ native/ # Tauri + Next.js application
โ โ โโโ src/ # Next.js frontend source
โ โ โโโ src-tauri/ # Tauri backend source
โ โ โโโ package.json
โ โโโ web/ # Next.js web application
โ โโโ app/ # Next.js app directory
โ โโโ package.json
โโโ packages/
โ โโโ ui/ # Shared shadcn/ui components
โ โโโ i18n/ # Internationalization package
โ โโโ eslint-config/ # Shared ESLint configuration
โ โโโ typescript-config/ # Shared TypeScript configuration
โโโ .github/ # GitHub Actions workflows
โโโ package.json # Root package.json
# Development
pnpm dev # Start all apps in development mode
pnpm build # Build all apps and packages
pnpm lint # Run ESLint on all packages
pnpm check-types # Run TypeScript type checking
pnpm clean # Clean all build outputs
# Tauri specific
pnpm tauri # Run Tauri CLI commands
pnpm tauri dev # Start Tauri app in development
# UI Components
pnpm shadcn # Add shadcn/ui components to the UI packageTo add new shadcn/ui components to your project:
# Add to the shared UI package
pnpm shadcn add button
# The component will be available in all apps as:
import { Button } from "@workspace/ui/components/button"This template includes built-in support for 10 languages:
- ๐ฌ๐ง English
- ๐น๐ท Turkish
- ๐ช๐ธ Spanish
- ๐ซ๐ท French
- ๐ฉ๐ช German
- ๐ต๐น Portuguese
- ๐ฎ๐น Italian
- ๐ท๐บ Russian
- ๐ฏ๐ต Japanese
- ๐จ๐ณ Chinese (Simplified)
Note: Current translations were generated using AI and may need review for accuracy.
// Import translations
import { useTranslations } from "@workspace/i18n";
// Use in components
function MyComponent() {
const t = useTranslations("HomePage");
return <h1>{t("title")}</h1>;
}- Create a new JSON file in
packages/i18n/src/messages/[locale].json - Add the locale configuration in
packages/i18n/src/routing.ts - Import and export the messages in
packages/i18n/src/index.ts
This project uses release-please for automated releases:
- Make changes and commit using Conventional Commits
- Push to the
masterbranch - release-please will create a release PR
- Merge the release PR to create a new release
- GitHub Actions will automatically build and publish desktop and mobile app binaries
feat:- New featuresfix:- Bug fixesdocs:- Documentation changesstyle:- Code style changesrefactor:- Code refactoringtest:- Test additions or changeschore:- Maintenance tasks
We welcome contributions! Please see CONTRIBUTING.md for details.
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.