Radical
Reference

Radical config

Every field accepted by RadicalConfigSchema in @akshatowo/radical/vite.

Radical accepts a config object passed to radical(config) in Vite config. There is no separate radical.config file loader. RadicalConfig, RadicalConfigSchema, validateConfig, and InvalidConfig are exported from @akshatowo/radical/vite.

App and delivery fields

FieldTypeDefault and constraints
appIdstring, requiredDot-separated segments. Each starts with a letter and contains letters, digits, or underscores. Identifies web cache storage and supplies native identifier defaults.
mode"remote" or "bundled"Omitted means remote behavior.
originHTTP originRequired in bundled mode. An exact http: or https: origin without path, trailing slash, query, or wildcard. In remote mode, overrides the recorded dev URL.
allowlistArray of HTTP originsAdditional remote-mode document origins. Ports are significant. Bundled mode permits only its local document origin.
devHoststringLetters, digits, dots, and hyphens. Defaults to the first external IPv4 address, then 127.0.0.1. Controls the recorded URL, not Vite's bind address.
nameNonempty stringShared native display name.
appNameNonempty stringLegacy fallback after name.
android.nameNonempty stringOverrides the shared name on Android.
android.packageIdstringDefaults to appId. At least two dot-separated segments starting with a letter. Letters, digits, and underscores allowed. Java keywords forbidden.
ios.nameNonempty stringOverrides the shared name on iOS.
ios.bundleIdstringDefaults to appId. At least two dot-separated segments containing letters, digits, or hyphens.

Display names resolve as platform name, shared name, legacy appName, then appId. Remote iOS generation permits at most ten distinct server and allowlist hostnames.

Image fields

FieldTypeConstraints
iconPath string or { image, backgroundColor? }Square PNG or JPEG, at least 1024 pixels per side. Relative to the app root.
icon.imageNonempty pathSame constraints as string-form icon.
icon.backgroundColor#RRGGBBOptional opaque RGB background.
splash.imageNonempty pathSquare PNG or JPEG, at least 2732 pixels per side. Relative to the app root.
splash.backgroundColor#RRGGBB, required with splashComposites transparent source pixels. Shared by light and dark appearances.

Invalid images produce InvalidAsset; asset-writing failures produce AssetGenerationFailed. These are generation failures, not client API exports.

Plugin fields

FieldTypeMeaning
pluginsArray of { manifest, selector? }Custom manifest module paths. Disabled unless listed.
plugins[].manifestNonempty stringModule path relative to the app root.
plugins[].selectorJavaScript identifierNamed manifest export. Omitted selects the default export.
pluginOptionsRecord of unknown valuesDecoded by each enabled manifest's config schema, keyed by its config selector.
internalPluginsObject of optional booleansEnables internal capabilities. Implications take precedence over explicit false values.
Internal flagDefaultImplication
device, transitionstrueNone
camera, videoStream, filePicker, intents, haptics, network, googleSignIn, dataProtectionfalseNone
notificationsfalseEnables network
pushNotificationsfalseEnables notifications, then network

Internal plugin options

SelectorRequired fields when enabled
CamerausageDescription, photoLibraryUsageDescription
VideoStreamusageDescription
GoogleSignInwebClientId, iosClientId

Camera descriptions require non-whitespace text without invalid XML control characters. Shared camera purposes compose once into the iOS camera description. Google identifiers match letters, digits, underscores, or hyphens followed by .apps.googleusercontent.com.

Firebase fields

FieldTypeMeaning
notifications.android.googleServicesNonempty pathApp-owned Firebase JSON copied into the generated Android project.
notifications.ios.googleServiceInfoNonempty pathApp-owned Firebase plist copied into the generated iOS project.
notifications.ios.environment"development" or "production"APNs entitlement. Defaults to "development".

Firebase paths do not enable push by themselves. Missing runtime push configuration produces MissingPushConfiguration. Invalid main config produces InvalidConfig; manifest failures produce InvalidPlugin or PluginDependencyConflict.

Source: config schema, internal registry.

On this page