Modern GTK4/Libadwaita Application for Creating AppImages
Create portable AppImages from any Linux application with an intuitive interface. Supports Python, Qt, GTK, Java, Electron, and more.
AppImage Creator is a comprehensive tool for packaging Linux applications into portable AppImage format. Built with modern GTK4 and Libadwaita, it provides a native GNOME experience with powerful features for developers and packagers.
Key Highlights:
- π¨ Beautiful Interface - Modern GTK4/Libadwaita UI
- π Smart Detection - Automatically detects application type and dependencies
- π Auto-Update System - Built-in update notifications for end users
- π Multi-Language - Full internationalization support
- π³ Distrobox Integration - Cross-distribution builds in containers
- π¦ Template System - Flexible launchers for different app types
- Multi-Platform Support - Python, Java, Shell scripts, Qt, GTK, Electron, and binary applications
- Wrapper Script Analysis - Advanced analysis of complex wrapper scripts
- Auto-Discovery - Automatically finds related files (locale, icons, desktop files)
- Icon Processing - Automatic conversion and resizing with fallback generation
- Progress Tracking - Real-time build progress with detailed logging
- Structure Preview - Preview AppImage contents before building
Built-in automatic update checking provides end users with:
- π Beautiful GTK4 update notifications
- π Visual download progress with MB counter
- π Release notes display with Markdown support
- π Multi-language support (auto-detects system locale)
- π One-click update and install
- βοΈ GitHub Releases API integration
The auto-update system uses the GitHub API to check for new releases. By default, GitHub limits unauthenticated requests to 60 per hour. To increase this limit to 5,000 requests per hour, you can configure a GitHub Personal Access Token.
Why use a token?
- Increases rate limit from 60 to 5,000 requests/hour
- Prevents update check failures for users checking frequently
- Token requires NO permissions (read-only access to public repositories only)
How to create a token:
- Go to GitHub Settings β Developer settings β Personal access tokens β Tokens (classic)
- Click "Generate new token (classic)"
- Set a descriptive name (e.g., "AppImage Update Checker")
- Do NOT select any scopes/permissions (leave all checkboxes unchecked)
- Click "Generate token" and copy it
For AppImage Developers (embedding token in AppImage):
If you want to distribute your AppImages with token embedded for better user experience:
-
Edit
usr/share/appimage-creator/updater/checker.pyline 18:# Change from: DEFAULT_GITHUB_TOKEN = os.environ.get("GITHUB_TOKEN", None) # To (temporarily, before building): DEFAULT_GITHUB_TOKEN = "ghp_your_token_here"
-
Build your AppImage with the embedded token
-
Before committing: Revert back to the original line to avoid GitHub blocking your push
For End Users (using environment variable):
Users can also configure their own token system-wide:
# Add to your shell profile (~/.bashrc, ~/.zshrc, etc.)
export GITHUB_TOKEN="ghp_your_token_here"
# Or set temporarily
GITHUB_TOKEN="ghp_your_token_here" ./your-app.AppImageSecurity Note: The token should have zero permissions and only provides read-only access to public repositories. It's safe to use and share publicly.
You can also host your own update information file on any server. The system supports a generic JSON format.
1. Create a JSON file (e.g., update.json):
{
"version": "1.2.3",
"download_url": "https://your-server.com/downloads/myapp-1.2.3-x86_64.AppImage",
"release_notes": "## New Features\n- Added generic JSON support\n- Improved UI"
}2. Configure in AppImage Creator:
- Update URL:
https://your-server.com/update.json - Filename Pattern:
myapp-*-x86_64.AppImage(matches the file name on the server)
The system automatically detects if the URL is from GitHub or a generic JSON file.
Required Dependencies:
# Arch Linux
sudo pacman -S distrobox gtk4 libadwaita python python-pillow python-gobject vte4
# Fedora
sudo dnf install distrobox gtk4 libadwaita python3 python3-pillow python3-gobject vte4
# Ubuntu/Debian
sudo apt install distrobox gtk4 libadwaita python3 python3-pil python3-gi gir1.2-vte-3.91Optional Dependencies:
fuse2orfuse3- For running AppImage toolslibrsvg- For SVG icon conversion (rsvg-convert)imagemagick- Alternative icon conversiondockerorpodman- Container runtime for distrobox
From Source:
git clone https://github.com/BigCommunity/appimage-creator.git
cd appimage-creator
python usr/share/appimage-creator/main.pyArch Linux Package:
cd pkgbuild
makepkg -si
appimage-creatorflowchart TB
A[User Input] --> B[Application Analysis]
B --> C{Detect Type}
C -->|Python| D[Python Template]
C -->|Binary| E[Binary Template]
C -->|Java| F[Java Template]
C -->|Qt/GTK| G[Framework Template]
D --> H[AppDir Builder]
E --> H
F --> H
G --> H
H --> I[Dependency Resolution]
I --> J[Distrobox Container]
J --> K[File Integration]
K --> L[Icon Processing]
L --> M[Desktop Entry]
M --> N[AppImage Generation]
N --> O[Auto-Update Integration]
O --> P[Final AppImage]
- Analysis Phase - Detect application type and structure
- Environment Setup - Create/reuse Distrobox container
- AppDir Creation - Build standard directory structure
- Dependency Resolution - Install system dependencies in container
- File Integration - Copy application files and resources
- Launcher Generation - Create appropriate launcher script
- Icon Processing - Convert icons to required sizes
- Desktop Integration - Generate .desktop file
- AppImage Creation - Use appimagetool or linuxdeploy
- Update Configuration - Embed auto-update metadata
appimage-creator/
βββ usr/
β βββ bin/
β β βββ appimage-creator # Shell wrapper
β βββ share/
β βββ appimage-creator/ # Main application
β β βββ main.py # Entry point
β β βββ core/ # Core modules
β β β βββ builder.py # Build orchestration
β β β βββ environment_manager.py
β β β βββ app_info.py
β β β βββ structure_analyzer.py
β β βββ ui/ # User interface
β β β βββ app.py
β β β βββ window.py
β β β βββ pages.py
β β β βββ widgets.py
β β β βββ dialogs.py
β β βββ templates/ # Application templates
β β β βββ base.py
β β β βββ app_templates.py
β β βββ generators/ # File generators
β β β βββ icons.py
β β β βββ files.py
β β βββ updater/ # Auto-update system
β β β βββ checker.py
β β β βββ downloader.py
β β β βββ update_window.py
β β β βββ check_updates.py
β β βββ utils/ # Utilities
β β β βββ i18n.py
β β β βββ system.py
β β β βββ file_ops.py
β β βββ validators/ # Input validation
β β βββ validators.py
β βββ applications/ # Desktop entries
β β βββ org.communitybig.appimage.desktop
β βββ icons/ # Application icons
β β βββ hicolor/scalable/apps/
β β βββ appimage-creator.svg
β βββ locale/ # Translations
β βββ [lang]/LC_MESSAGES/
βββ locale/ # Source translations
β βββ *.json
βββ pkgbuild/ # Arch packaging
β βββ PKGBUILD
β βββ pkgbuild.install
βββ CLAUDE.md # AI assistant guide
βββ GITHUB_TOKEN_SETUP.md # GitHub setup guide
βββ README.md # This file
-
Launch Application
appimage-creator
-
Configure Application Info
- Enter application name
- Set version number (e.g., 1.0.0)
- Select main executable
- Choose icon (optional)
-
Configure Auto-Update (Optional)
- Click button to fill GitHub template
- Edit
OWNER/REPOto match your repository - Example:
https://api.github.com/repos/biglinux/myapp/releases/latest - Set filename pattern:
myapp-*-x86_64.AppImage
-
Advanced Settings
- Select application categories
- Choose build environment (Ubuntu/Debian/Fedora/Arch)
- Add additional directories if needed
-
Build AppImage
- Review structure preview
- Click "Build" to generate AppImage
- Monitor progress in real-time
| Type | Detection | Template | Features |
|---|---|---|---|
| Binary | ELF executable | BinaryAppTemplate | Direct execution |
| Python | .py shebang |
PythonAppTemplate | Python environment |
| Python Wrapper | Complex scripts | PythonWrapperAppTemplate | Advanced detection |
| Shell Script | Shell shebang | ShellAppTemplate | Script execution |
| Java | .jar files |
JavaAppTemplate | JVM setup |
| Qt | Qt libraries | QtAppTemplate | Qt environment |
| GTK | GTK libraries | GtkAppTemplate | GTK schemas/typelibs |
| Electron | Electron app | ElectronAppTemplate | Electron runtime |
For Developers:
Option 1: GitHub Releases
Update URL: https://api.github.com/repos/OWNER/REPO/releases/latest
Filename Pattern: myapp-*-x86_64.AppImageOption 2: Custom Server (Generic JSON)
Update URL: https://your-server.com/update.json
Filename Pattern: myapp-*-x86_64.AppImageFor End Users: AppImages with auto-update enabled will:
- Check for updates every hour automatically
- Show notification when update is available
- Display release notes and version info
- Allow one-click update with progress tracking
- Update seamlessly without losing data
# Clone repository
git clone https://github.com/BigCommunity/appimage-creator.git
cd appimage-creator
# Run directly
python usr/share/appimage-creator/main.py# Arch Linux
cd pkgbuild
makepkg -f
# Install locally
sudo pacman -U appimage-creator-*.pkg.tar.zstTranslations use JSON format in locale/ directory:
# Translations are auto-generated via GitHub Actions
# using attranslate and Azure/OpenAI services
locale/
βββ en.json # English (fallback to source strings)
βββ pt_BR.json # Portuguese (Brazil)
βββ es.json # Spanish
βββ ...Do not manually edit files in usr/share/locale/ - they are auto-generated.
System dependencies are defined in core/builder.py:
SYSTEM_DEPENDENCIES = {
'glib': {
'libraries': ['libglib-2.0.so', 'libgio-2.0.so'],
'essential': True
},
'gtk3': {
'libraries': ['libgtk-3.so'],
'typelibs': ['Gtk-3.0']
},
# ... more dependencies
}AppImage tools not found:
- Tools (appimagetool, linuxdeploy) are auto-downloaded on first use
- Requires
fuse2orfuse3to run downloaded tools
Permission denied on executable:
- Ensure selected executable has execute permissions:
chmod +x file
Icon processing fails:
- Install optional tools:
librsvg,imagemagick, orinkscape - Application will generate fallback icon if tools unavailable
Build fails in container:
- Check Distrobox is properly installed
- Verify container runtime (podman/docker) is working
- Try different build environment (Ubuntu/Fedora/Arch)
Update notifications not appearing:
- Verify GitHub API URL is correct
- Check filename pattern matches actual AppImage name
- Ensure graphical environment is available (X11/Wayland)
Enable verbose logging:
python usr/share/appimage-creator/main.py --debugCheck build logs in console output for detailed error messages.
We welcome contributions! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow existing code style and structure
- Add comments for complex logic
- Update documentation for new features
- Test thoroughly before submitting
- Use English for code and comments
This project is licensed under the MIT License - see the LICENSE file for details.
- GTK/GNOME Teams - Excellent toolkit and design system
- AppImage Project - Portable application format
- Distrobox - Container-based build environments
- BigLinux Community - Testing and feedback
- All contributors and users
Made with β€οΈ by BigCommunity