pack.json Reference
Complete reference for the pack manifest file
Every pack needs a pack.json file in its root folder. Below is an example of a pack.json that uses each field.
{
"SchemaVersion": 1,
"Name": "My Custom Pack",
"Author": "Your Name",
"Description": "Custom icons and sounds for my favorite apps",
"Version": "1.0.0",
"Icons": [
{
"Android": ["com.discord"],
"iOS": ["com.hammerandchisel.discord"],
"PNG": "icons/discord.png"
},
{
"Android": ["com.google.android.gm"],
"iOS": ["com.apple.mobilemail"],
"iOSCategory": ["Email"],
"PNG": "icons/mail.png"
}
],
"Sounds": {
"ding": {
"Name": "Ding",
"Ogg": "sounds/ding.ogg",
"Android": ["com.discord", "com.slack"],
"iOS": ["com.hammerandchisel.discord", "com.tinyspeck.chatlyio"]
},
"chime": {
"Name": "Soft Chime",
"Ogg": "sounds/chime.ogg",
"Android": ["com.google.android.gm"],
"iOS": ["com.apple.mobilemail"]
}
}
}Fields
| Field | Required | Description |
|---|---|---|
SchemaVersion | Yes | Must be 1 |
Name | Yes | Display name shown in NotiVR |
Author | Yes | Pack creator |
Description | Yes | Short description shown in app |
Version | Yes | Version string, such as "1.0.0" |
Icons | Yes | Array of icon entries, or [] |
Sounds | Yes | Object of sound entries, or {} |
Icon Entries
Each item in Icons maps one PNG file to one or more apps or iOS categories.
| Field | Required | Description |
|---|---|---|
Android | No | Android package names, such as ["com.discord"] |
iOS | No | iOS bundle IDs, such as ["com.hammerandchisel.discord"] |
iOSCategory | No | ANCS category fallbacks, such as ["Email", "Social"] |
PNG | Yes | Relative path to a .png file inside the pack |
You must include at least one of Android, iOS, or iOSCategory. Without one of those fields, the icon has nothing to match and won't be used.
On iOS you are able to set one or more category fallbacks. This is useful if you want to use a generic icon for all email apps. See the Icons page for more information.
Sound Entries
Sounds is an object keyed by your sound IDs. A sound ID only needs to be unique inside the pack.
| Field | Required | Description |
|---|---|---|
Name | Yes | Display name shown in NotiVR |
Ogg | Yes | Relative path to a .ogg file inside the pack |
Android | No | Android package names that should use this sound by default |
iOS | No | iOS bundle IDs that should use this sound by default |
Sounds with empty or missing Android and iOS arrays can still be selected manually in Sound Settings.
Path Rules
Asset paths are relative to the pack root:
icons/discord.pngis validsounds/ding.oggis valid../shared/icon.pngis blocked.mp3,.wav,.webp, and other extensions are ignored
NotiVR validates paths before loading assets. Missing files do not break the whole pack, but the missing icon or sound will not be used.