Integrating Capacitor with Next.js: A Step-by-Step Guide

Hamza Ali
4 min readJul 11, 2024

In this guide, we’ll walk through how to integrate Capacitor with a Next.js project to build cross-platform mobile apps. Capacitor is a powerful tool that helps turn web applications into native mobile experiences.

Prerequisites

Before you start, ensure you have the following installed:

  • Node.js and npm
  • Next.js
  • Android Studio (for Android development)
  • Xcode (for iOS development, macOS only)

Step 1: Set Up Next.js Project

First, set up your Next.js project if you haven’t already:

npx create-next-app@latest
cd your-next-app

Step 2: Install Capacitor

Next, install Capacitor core and CLI:

npm install @capacitor/core
npm install -D @capacitor/cli

Initialize Capacitor in your project

npx cap init

Follow the prompts to configure your app. For example:

  • appId: com.example.app
  • appName: example

Step 3: Configure Capacitor

Create or update the capacitor.config.ts file:

import type { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
appId: 'com.example.app',
appName: 'example',
webDir: 'out', // Ensure this matches your Next.js output directory
};
export default config;

Step 4: Install Platform Plugins

Install the Capacitor platform plugins for Android and iOS:

npm install @capacitor/android @capacitor/ios

Step 5: Add Platforms

Add the Android and iOS platforms to your project:

npx cap add android
npx cap add ios

Step 6: Configure Next.js for Static Export

Update your next.config.mjs to enable static exports and disable image optimization:

/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
images: {
unoptimized: true,
},
output: 'export',
};
export default nextConfig;

Step 7: Build and Export Your Project

Build and export your Next.js project:

npm run build

After a successful build, if the folder and file structure looks like this, the specific file names do not matter. It means the build was successful

After a successful build, if the folder and file structure looks like this, the specific file names do not matter. It means the build was successful.

Step 8: Sync Capacitor

Sync the Capacitor configuration and assets:

npx cap sync

Step 9: Open and Run the Android Project

Open your Android project in Android Studio:

npx cap open android

Run your app on an Android device or emulator directly from Android Studio.

Step 10: Open and Run the iOS Project

For macOS users, open your iOS project in Xcode:

npx cap open ios

Run your app on an iOS device or simulator from Xcode.

Step 11:Generate Apk

Before generate apk file you must have to create keyStore:

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

Enter keystore password: 123456
Enter key return password for : 123456
What is your first and last name?
[Unknown]:
What is the name of your organizational unit?
[Unknown]:
What is the name of your organization?
[Unknown]:
What is the name of your City or Locality?
[Unknown]:
What is the name of your State or Province?
[Unknown]:
What is the two-letter country code for this unit?
[Unknown]:
Is CN=your name, OU=your organizational unit, O=your organization, L=your city, ST=your state, C=your country correct?
[no]: yes

Step 12:Change the file Directory

move my-release-key.keystore file into Andriod folder

npx cap build android --keystorepath my-release-key.keystore --keystorepass 123456 --keystorealias alias_name --keystorealiaspass 123456 --androidreleasetype APK

Step 13:Build Apk

npx cap build android

Step 14:Build Apk Directory

android>app>build>apk>release

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Hamza Ali
Hamza Ali

Written by Hamza Ali

Hi! I am an experienced web and mobile app developer presently earning a degree. I enjoy developing clean, user-friendly applications that bring ideas to life.

Responses (1)

Write a response