Netloy 1.0.0
See the version list below for details.
dotnet tool install --global Netloy --version 1.0.0
dotnet new tool-manifest
dotnet tool install --local Netloy --version 1.0.0
#tool dotnet:?package=Netloy&version=1.0.0
nuke :add-package Netloy --version 1.0.0
<div align="center">
๐ Netloy
Cross-Platform .NET Application Packaging Tool
Build once, deploy everywhere
Features โข Installation โข Quick Start โข Documentation โข Contributing
</div>
๐ 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
๐ค 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
<div align="center">
Made with โค๏ธ by Adel Bakhshi
โญ If Netloy helps your project, consider giving it a star!
</div>
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 is compatible. 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 was computed. 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.