DEV Community

Cover image for Tino Wizard: The GUI Setup Creator Linux Has Been Missing
tmotagam
tmotagam

Posted on

Tino Wizard: The GUI Setup Creator Linux Has Been Missing

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 Tino Wizard fills.

What Is Tino Wizard?

Tino Wizard is an open-source (GPLv3) GUI application that generates professional Linux installers and uninstallers for your apps — whether they're GUI applications or CLI tools. It's written in Python with Tkinter, and the output is a single, self-extracting executable that guides end users through installation with a familiar wizard experience.

Think of it as Inno Setup for Linux, but designed from the ground up around Linux conventions: .desktop files, /usr/local/bin symlinks, privilege elevation via pkexec, and XDG-compliant icon paths.

Getting Started

Tino Wizard is available on GitHub:

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 .desktop files 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...
Enter fullscreen mode Exit fullscreen mode

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: .tino JSON files — version-controllable, human-readable
  • Installer engine: Separate Engine.py module with callback-driven architecture — UI and business logic are cleanly decoupled
  • Compression: tarfile module with support for gzip, bz2, and lzma with configurable levels
  • Elevation: pkexec-based privilege elevation
  • Desktop files: Generated and validated with desktop-file-validate
  • Rollback: File-level tracking via insertion-ordered dictionary — reversed for precise cleanup
  • I18n: gettext-based with .po/.mo locale files for installer/uninstaller UI

What the End User Sees

When a user runs the generated installer, they get a complete wizard experience:

  1. Language Selection — if multiple translations are configured
  2. Welcome Page — branded with your app icon
  3. License Agreement — with mandatory acceptance checkbox
  4. Pre-Install Information — release notes, system requirements
  5. Additional Tasks — user-selectable options
  6. Ready to Install — summary with destination path
  7. Installation Progress — real-time progress bar with file-by-file status
  8. Post-Install Information — getting-started guide
  9. 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.

Top comments (0)