NotiVR Docs

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

FieldRequiredDescription
SchemaVersionYesMust be 1
NameYesDisplay name shown in NotiVR
AuthorYesPack creator
DescriptionYesShort description shown in app
VersionYesVersion string, such as "1.0.0"
IconsYesArray of icon entries, or []
SoundsYesObject of sound entries, or {}

Icon Entries

Each item in Icons maps one PNG file to one or more apps or iOS categories.

FieldRequiredDescription
AndroidNoAndroid package names, such as ["com.discord"]
iOSNoiOS bundle IDs, such as ["com.hammerandchisel.discord"]
iOSCategoryNoANCS category fallbacks, such as ["Email", "Social"]
PNGYesRelative 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.

FieldRequiredDescription
NameYesDisplay name shown in NotiVR
OggYesRelative path to a .ogg file inside the pack
AndroidNoAndroid package names that should use this sound by default
iOSNoiOS 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.png is valid
  • sounds/ding.ogg is valid
  • ../shared/icon.png is 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.

On this page