-
Notifications
You must be signed in to change notification settings - Fork 0
Custom Apps
NoahRJ edited this page Jun 15, 2026
·
1 revision
Since Iru resources must also contain metadata (e.g. active or name), each resource's on-disk representation is
actually a directory of associated files. Certain files are required for a directory to be recognized as a resource.
Tip
Additional files, such as a README.md, can be added without causing issues so long as they cannot be confused with
the required files.
Each app requires:
- A directory within an iructl repository
appsdirectory containing the app's files - Exactly one
info.[plist|yaml|json]file containing the app's metadata, including afilereference (the installer'snameandsha256) - The installer binary itself in the payload directory (
payloadsby default) -- not in the app directory -- whose name and contents match thefilereference
An app may also include up to three optional scripts. Their filenames must start with audit, preinstall, and
postinstall, respectively. An audit script is only valid when install_enforcement is continuously_enforce.
$ lsd --tree apps payloads
apps
└── MyApp
├── audit.zsh
├── info.yaml
├── postinstall.zsh
└── preinstall.zsh
payloads
└── MyApp.pkg
apps/MyApp/info.yaml
id: 54bef6b3-b25e-44b4-89fd-d528d73939e4
name: MyApp
active: false
install_type: package
install_enforcement: continuously_enforce
restart: false
file:
name: MyApp.pkg
sha256: 07715b2ad9a33a0ab0f99892b40dc8a20e3f11dcd9e858bb92087cf56217fbedaudit.zsh
#!/bin/zsh -f
echo "Auditing MyApp..."
exit 0preinstall.zsh
#!/bin/zsh -f
echo "Preparing to install MyApp..."
exit 0postinstall.zsh
#!/bin/zsh -f
echo "Finished installing MyApp."
exit 0Getting Started
Working with Resources
- Populating Your Local Repository
- Editing Resources
- Self Service
- Pushing and Syncing
- Listing and Showing Resources
- Deleting Resources
- Blueprint Assignment
Reference
Python API Client