Netloy 1.2.0
dotnet tool install --global Netloy --version 1.2.0
dotnet new tool-manifest
dotnet tool install --local Netloy --version 1.2.0
#tool dotnet:?package=Netloy&version=1.2.0
nuke :add-package Netloy --version 1.2.0
<img src="assets/netloy.1024x1024.png" alt="Netloy Logo" width="200"/>
๐ Netloy
Cross-Platform .NET Application Packaging Tool
Build once, deploy everywhere
Features โข Installation โข Quick Start โข Documentation โข Changelog โข Contributing
๐ What is Netloy?
Netloy is a powerful command-line tool that automates the packaging and deployment of .NET applications across multiple platforms and formats. With a single configuration file, create professional installers and packages for Windows, Linux, and macOS without platform-specific expertise.
Say goodbye to complex build scripts and manual packaging. Netloy handles icon generation, desktop integration, AppStream metadata, and platform-specific requirements automatically.
โจ Features
๐ฏ Multi-Platform Support
- Windows: EXE (Inno Setup), MSI (WiX v3)
- Linux: DEB, RPM, AppImage, Flatpak, Pacman
- macOS: APP Bundle, DMG
- Portable: Cross-platform ZIP/TAR.GZ archives
โ๏ธ Powerful Configuration
- Single
.netloyconfiguration file for all platforms - Macro system for dynamic templating (
${APP_VERSION},${PUBLISH_OUTPUT_DIRECTORY}, etc.) - Post-publish scripts (Bash, PowerShell, Batch)
- Configuration upgrade tool for version compatibility
๐จ Automated Asset Management
- Icon generation: Provide one PNG (1024ร1024), get all required sizes automatically
- Multi-format icon support: PNG, SVG, ICO, ICNS
- AppStream metadata generation for Linux software centers
๐ฅ๏ธ Desktop Integration
- Desktop shortcuts and Start Menu entries
- File associations and context menu integration
- Terminal command support (
StartCommand) - Platform-specific category mapping
๐ง Build Flexibility
- Supports both .NET Core and .NET Framework
- Custom
dotnet publisharguments - Direct binary packaging (skip build, use existing binaries)
- Clean build artifacts automatically
๐ฆ Installation
Prerequisites
- .NET 8.0 SDK or later
Install via .NET Tool
dotnet tool install --global Netloy
Verify Installation
netloy --version
๐ Quick Start
1. Create a Configuration File
Navigate to your .NET project directory and create a new configuration:
netloy --new conf
This generates a .netloy file with default settings. Edit it to customize your application metadata, packaging options, and platform-specific settings.
2. Build Your Package
Windows Installer (MSI)
netloy -t msi -r win-x64 --config-path MyApp.netloy
Linux DEB Package
netloy -t deb -r linux-x64 --config-path MyApp.netloy
macOS DMG
netloy -t dmg -r osx-arm64 --config-path MyApp.netloy
3. Find Your Package
Built packages are saved to the output directory specified in your configuration or via -o flag.
๐ Supported Package Types
| Platform | Type | Format | Command Flag |
|---|---|---|---|
| Windows | Installer | EXE | -t exe |
| Windows | Installer | MSI | -t msi |
| Windows | Portable | ZIP | -t portable |
| Linux | Package | DEB | -t deb |
| Linux | Package | RPM | -t rpm |
| Linux | Package | Pacman | -t pacman |
| Linux | AppImage | AppImage | -t appimage |
| Linux | Flatpak | Flatpak | -t flatpak |
| Linux | Portable | TAR.GZ | -t portable |
| macOS | Bundle | APP (zipped) | -t app |
| macOS | Installer | DMG | -t dmg |
| macOS | Portable | TAR.GZ | -t portable |
๐ ๏ธ Configuration Example
Here's a minimal .netloy configuration:
App Preamble
AppBaseName = MyApp
AppFriendlyName = My Awesome App
AppId = com.example.myapp
AppVersionRelease = 1.0.0
AppShortSummary = A simple example application
AppDescription = """
This is a longer description of my application.
It supports multiple paragraphs.
"""
AppLicenseId = MIT
Publisher
PublisherName = Example Inc.
PublisherCopyright = Copyright ยฉ 2025 Example Inc.
PublisherLinkUrl = https://example.com
PublisherEmail = contact@example.com
Desktop Integration
DesktopTerminal = false
PrimeCategory = Utility
IconFiles = """
Deploy/icons/app-icon.1024x1024.png
Deploy/icons/app-icon.svg
Deploy/icons/app-icon.ico
Deploy/icons/app-icon.icns
"""
AutoGenerateIcons = true
.NET Publish
DotnetProjectPath = ./MyApp.csproj
DotnetPublishArgs = -p:Version=<APPVERSION> --self-contained true
Output
PackageName = myapp
OutputDirectory = ./output
๐ For complete configuration reference, see the Wiki.
๐งช Examples
Build with Custom Version
netloy -t msi -r win-x64 --app-version 2.1.0 --config-path MyApp.netloy
Build for ARM64 Architecture
netloy -t deb -r linux-arm64 --config-path MyApp.netloy --verbose
Skip Build (Use Existing Binaries)
netloy -t appimage -r linux-x64 --binary-path ./bin/Release/net8.0/linux-x64/publish
Create New Desktop File Template
netloy --new desktop
๐ Documentation
- Wiki Home: Comprehensive documentation
- Getting Started Guide: Step-by-step tutorial
- Configuration Reference: All config options explained
- Macro System: Template variables and usage
- Command Line Reference: CLI arguments
๐ Changelog
For a detailed list of changes, new features, and bug fixes in each version, see the CHANGELOG.md.
๐ค Contributing
Contributions are welcome! Please read our Contributing Guide for details on our code of conduct and the process for submitting pull requests.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
๐ License
This project is licensed under the AGPL-3.0 License - see the LICENSE file for details.
๐ Acknowledgments
- Inspired by PupNet Deploy, though Netloy is a complete rewrite from scratch with expanded features and cross-platform support
- Inno Setup for Windows EXE installer generation
- WiX Toolset for Windows MSI package creation
- AppImage for portable Linux application format
- Flatpak for sandboxed Linux application distribution
Made with โค๏ธ by Adel Bakhshi
โญ If Netloy helps your project, consider giving it a star!
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
This package has no dependencies.