Skip to content

Quick Start Guide

Installation

Prerequisites

  • Python 3.11 or higher
  • Git

Choose Your Installation Method

Option 1: pip (For Using NAPT)

Best for users who want to use the tool.

# Create a project directory
mkdir napt-workspace
cd napt-workspace

# Create and activate virtual environment (recommended)
python -m venv .venv
.venv\Scripts\Activate.ps1  # On Linux/macOS: source .venv/bin/activate

# Install from PyPI
pip install napt

# Verify installation
napt --version

Option 2: Poetry (For Development)

Best for contributing to NAPT.

ℹ️ Note: Clones the main branch so you're working with the latest code.

Prerequisites: Poetry must be installed. See Poetry Installation Guide

# Clone repository
git clone https://github.com/RogerCibrian/notapkgtool.git
cd notapkgtool

# Install (Poetry creates .venv automatically)
poetry install

# Activate virtual environment
.venv\Scripts\Activate.ps1  # On Linux/macOS: source .venv/bin/activate

# Verify installation
napt --version

Platform Requirements

NAPT runs on Windows, Linux, and macOS with the following requirements:

Windows

  • No additional dependencies required
  • All features supported (discovery, building, packaging)
  • Uses native PowerShell COM API for MSI extraction

Linux/macOS

  • Required: msitools for MSI version extraction
  • Limitation: Cannot create .intunewin packages (requires Windows)
  • Supports discovery and building features

Install msitools:

# Debian/Ubuntu
sudo apt-get install msitools

# RHEL/Fedora
sudo dnf install msitools

# macOS
brew install msitools

See the Cross-Platform Support section for platform-specific workflows.

Basic Usage

Command-Line Options

All NAPT commands support these helpful flags:

  • --help or -h - Show detailed help and examples for any command
  • --verbose - Show progress details and additional information
  • --debug - Show full diagnostics including configuration dumps

Example: napt discover --help or napt build --verbose

Initialize a New Project

Set up the recommended directory structure for a new NAPT project:

# Initialize in current directory
napt init

# Initialize in a specific directory
napt init /path/to/project

# Overwrite existing files (backs up originals)
napt init --force

This creates:

  • recipes/ - Directory for your recipe files
  • defaults/org.yaml - Organization-wide configuration (commented template)
  • defaults/vendors/ - Directory for vendor-specific defaults

Validate a Recipe

Quick validation checks syntax and configuration without downloading anything:

napt validate recipes/Google/chrome.yaml

Discover Latest Version

Download the installer and extract version information:

# Discover version and download installer
# State tracking enabled by default for efficient re-runs
napt discover recipes/Google/chrome.yaml

# Specify custom output directory
napt discover recipes/Google/chrome.yaml --output-dir ./cache

# Disable state tracking (always download, no caching)
napt discover recipes/Google/chrome.yaml --stateless

Build PSADT Package

Create a complete PSADT package ready for deployment:

# Build PSADT package from recipe and downloaded installer
napt build recipes/Google/chrome.yaml

# Specify custom downloads and output directories
napt build recipes/Google/chrome.yaml --downloads-dir ./downloads --output-dir ./builds

Create .intunewin Package

Package the PSADT build for Microsoft Intune:

# Create .intunewin from recipe (infers most recent build automatically)
napt package recipes/Google/chrome.yaml

# Specify output directory and clean source after packaging
napt package recipes/Google/chrome.yaml --output-dir ./packages --clean-source

Example Workflows

Complete Workflow: Recipe to Package

Here's a complete workflow from recipe validation to Intune package:

1. Validate recipe

$ napt validate recipes/Google/chrome.yaml
Validating recipe: /path/to/recipes/Google/chrome.yaml

======================================================================
VALIDATION RESULTS
======================================================================
Recipe:      /path/to/recipes/Google/chrome.yaml
Status:      VALID
App Count:   1

======================================================================

[SUCCESS] Recipe is valid!

2. Discover and download latest version

$ napt discover recipes/Google/chrome.yaml
Discovering version for recipe: /path/to/recipes/Google/chrome.yaml
Output directory: /path/to/downloads

[1/4] Loading configuration...
[2/4] Discovering version...
[3/4] Discovering version...
[4/4] Downloading installer...
download progress: 0%
...
download progress: 100%
[1/1] Download complete: /path/to/downloads/googlechromestandaloneenterprise64.msi (abc123...) in 25.5s
======================================================================
DISCOVERY RESULTS
======================================================================
App Name:        Google Chrome
App ID:          napt-chrome
Strategy:        url_download
Version:         144.0.7559.110
Version Source:  msi
File Path:       /path/to/downloads/googlechromestandaloneenterprise64.msi
SHA-256:         abc123...
Status:          success
======================================================================

[SUCCESS] Version discovered successfully!

3. Build PSADT package

$ napt build recipes/Google/chrome.yaml
Building PSADT package for recipe: /path/to/recipes/Google/chrome.yaml
Downloads directory: /path/to/downloads

[1/8] Loading configuration...
[2/8] Finding installer...
[3/8] Determining version...
[4/8] Getting PSADT release...
[5/8] Creating build structure...
[6/8] Applying branding...
[7/8] Generating detection script...
[8/8] Generating requirements script...
======================================================================
BUILD RESULTS
======================================================================
App Name:        Google Chrome
App ID:          napt-chrome
Version:         144.0.7559.110
PSADT Version:   4.1.8
Build Directory: builds/napt-chrome/144.0.7559.110/packagefiles
Status:          success
======================================================================

[SUCCESS] PSADT package built successfully!

4. Create .intunewin package

$ napt package recipes/Google/chrome.yaml
Creating .intunewin package from: /path/to/builds/napt-chrome/144.0.7559.110

[1/5] Verifying build structure...
[2/5] Getting IntuneWinAppUtil tool...
[3/5] Creating .intunewin package...
[4/5] Copying detection scripts...
[5/5] Package complete
======================================================================
PACKAGE RESULTS
======================================================================
App ID:          napt-chrome
Version:         144.0.7559.110
Package Path:    /path/to/packages/napt-chrome/144.0.7559.110/Invoke-AppDeployToolkit.intunewin
Build Directory: /path/to/builds/napt-chrome/144.0.7559.110
Status:          success
======================================================================

[SUCCESS] .intunewin package created successfully!

Result: Ready-to-upload .intunewin file in packages/napt-chrome/144.0.7559.110/

Quick Check Workflow

Check if a new version is available (skips re-downloading if unchanged):

# Discover with verbose output to see what happens
napt discover recipes/Google/chrome.yaml --verbose

If the version hasn't changed since the last run and the file exists, you'll see:

[1/4] Checking cached version...
[2/4] Version unchanged (144.0.7559.110)
[3/4] File exists, skipping download
[4/4] Using cached file: downloads/googlechromestandaloneenterprise64.msi

Note: This requires having run napt discover at least once before to create the cached version.

Clean Build Workflow

Force a fresh download and rebuild:

# Always download (ignore cache)
napt discover recipes/Google/chrome.yaml --stateless

# Build with custom output
napt build recipes/Google/chrome.yaml --output-dir ./my-builds

# Package and clean up source
napt package recipes/Google/chrome.yaml --clean-source

Common Tasks

For step-by-step guides on common workflows, see Common Tasks:

  • Create a recipe for a GitHub release app
  • Create a recipe for a vendor download page
  • Create a recipe for a JSON API endpoint
  • Troubleshoot discovery failures

What's Next?

Now that you have NAPT installed and understand the basic commands, explore:

  • Common Tasks - Step-by-step guides for common workflows
  • User Guide - Learn about discovery strategies, configuration, and advanced features
  • Creating Recipes - Write your own application recipes
  • Examples - Browse example recipes for Chrome, Git, and more