The Problem Every Linux Developer Knows
You've built a great application. It works. Your users love it. Now you need to ship it.
On Windows, you fire up Inno Setup or NSIS and produce a polished .exe installer in minutes. On macOS, you drag an .app into a .dmg. On Linux? You learn the intricacies of dpkg-deb, wrestle with RPM spec files, consider Flatpak manifests, debate Snap confinement, or simply hand users a tarball and a README that says "extract and run install.sh."
None of those options give you what Inno Setup gives Windows developers: a visual, wizard-driven tool that turns your finished application into a self-contained, branded, graphical installer — complete with license acceptance, uninstaller, .desktop integration, and localization — without requiring you to learn a single packaging spec.
That's the gap :
Download, click on single file executable and install the wizard.
Then create a project, point it at your application files, configure your options through the GUI, and generate your installer. The output is a single executable that works on any Linux distribution with a display server.
How It Works — A Developer's Walkthrough
Tino Wizard is itself a wizard. When you launch it, you step through a sequence of pages that collect everything the tool needs to generate your installer.
1. Project Setup
Start by creating a new .tino project file or importing an existing one. The project file is a structured JSON document that stores your entire configuration — you can version-control it alongside your source code.
2. Application Information
Fill in the basics:
- Application Name, Version, Author, Description, Homepage URL
License File — displayed to the user during installation for acceptance
Pre/Post Install Information Files — shown before and after installation (release notes, getting-started guides, etc.)
Installer & Uninstaller Icons — custom branding for the setup wizards
Compression Algorithm — choose between gzip, bz2, or lzma (xz) with configurable compression levels (0–9)
3. Files & Folders
Add the files and directories that make up your application. Tino Wizard recursively collects folder contents, validates symlinks for safety (escaping project directories is blocked), and bundles everything into a compressed tarball.
4. Installer Options
App Type — GUI Application or CLI Tool (determines whether.desktopfiles and icon symlinks are generated)
Destination Path — where the app installs (e.g.,/opt/myapp)
Executable Source & Target — pick which bundled file becomes the main binary, and where its symlink lands (e.g.,/usr/local/bin/myapp)
Icon Source & Target — map your icon to/usr/share/icons/myapp.png
.desktop File Configuration
For GUI applications, Tino Wizard generates and validates a .desktop file (using desktop-file-validate):
- Comment, Categories, custom key-value pairs
- Desktop Actions (e.g., "New Window", "Open Recent")
- Executable arguments
- Full XDG compliance
Scripts & Tasks
Pre-install script — runs before extraction (environment checks, dependency setup)
Post-install script — runs after extraction (database migrations, config generation)
Pre-uninstall script — runs before removal (graceful shutdown, backup prompts)
Post-uninstall script — runs after removal (cleanup)
Additional Tasks — optional user-selectable tasks shown during installation (e.g., "Add to PATH", "Create desktop shortcut for all users")
5. Localization
Tino Wizard has built-in internationalization support. Your installer can ship with translations for multiple languages — the generated installer presents a language selection dialog at launch. Built-in locale support includes:
- 🇺🇸 English (en_US)
- 🇪🇸 Spanish (es_ES)
- 🇫🇷 French (fr_FR)
- 🇮🇳 Hindi (hi_IN)
- 🇨🇳 Chinese Simplified (zh_CN)
Per-language overrides include: application name, description, license file, pre/post install info files, and additional task labels.
6. Build & Generate
Click Generate Installer and Tino Wizard executes a 4-stage build pipeline:
Stage 1/4: Building Uninstaller...
Stage 2/4: Creating Archive...
Stage 3/4: Preparing Installer Configuration...
Stage 4/4: Building Installer...
The output is a single self-contained executable — "YourApp setup" — that you can distribute directly. No runtime dependencies for end users.
The Technical Details
Built with: Python 3, Tkinter, Pydantic (data validation), PyInstaller (binary generation)
Project format:.tinoJSON files — version-controllable, human-readable
Installer engine: SeparateEngine.pymodule with callback-driven architecture — UI and business logic are cleanly decoupled
Compression:tarfilemodule with support for gzip, bz2, and lzma with configurable levels
Elevation:pkexec-based privilege elevation
Desktop files: Generated and validated withdesktop-file-validate
Rollback: File-level tracking via insertion-ordered dictionary — reversed for precise cleanup
I18n: gettext-based with.po/.molocale files for installer/uninstaller UI
What the End User Sees
When a user runs the generated installer, they get a complete wizard experience:
Language Selection — if multiple translations are configured
Welcome Page — branded with your app icon
License Agreement — with mandatory acceptance checkbox
Pre-Install Information — release notes, system requirements
Additional Tasks — user-selectable options
Ready to Install — summary with destination path
Installation Progress — real-time progress bar with file-by-file status
Post-Install Information — getting-started guide
Finish — clean completion
If installation fails at any point, the installer automatically rolls back — removing extracted files, symlinks, desktop files, and the installation directory itself. The rollback is tracked at the file level for precision.
The generated uninstaller provides an equally clean GUI experience for removal, with pre/post-uninstall script support.
Privilege elevation is handled automatically via pkexec when installing to system directories like /opt or /usr/local/bin.
🔗 Links:
Have you tried Tino Wizard? Share your experience in the comments below. And if you're a contributor, check out the GitHub organization — the project is open source and welcoming contributions.
SOCIAL SHARE CARD GENERATOR