Skip to content

Building for Production

inca build bundles your app once, with no window opened — the output lands in dist. inca package does the same, then wraps the result into a distributable application: a .app on macOS, a plain directory on Linux.

Configuration

NOTE

Configuring app metadata through package.json's "inca" key still works, but is deprecated — inca package prints a warning, and inca.config.ts wins when both are present.

When running inca, it will automatically try to resolve a config file named inca.config.ts inside your app's root (other JS/JSON extensions are also supported), for app metadata and where a build reads and writes:

inca.config.ts
ts
import { defineConfig } from "@incajs/cli/config";

export default defineConfig({
  productName: "Click Counter",
  identifier: "com.example.click-counter",
  icon: "assets/icon.icns",
});

productName

The app's display name. Defaults to package.json's own "name", with any npm scope (@org/) stripped.

identifier

A reverse-DNS-style unique id — e.g. macOS's CFBundleIdentifier. Defaults to a generated org.inca.<slug>. It should be world-unique, so inca package prints a note when it falls back to the generated one rather than using it silently.

icon

The packaged app's icon file, resolved relative to inca.config.ts's own directory.

version

The packaged app's version. Defaults to package.json's own "version".

entry

The app's entry point, overriding the automatic entry resolution (src/main.mts, or src/App.vue).

outDir

Where a build's output is written. Defaults to dist.

Released under the MIT or Apache-2.0 license.