A powerful Python tool for personalizing the HATS (Homebrew App & Tool Store) pack for the Nintendo Switch. This tool uses the standard HATS release as a foundation, allowing you to easily manage and curate your own collection of homebrew applications, patches, overlays, and payloads with an intuitive menu-driven interface.
- Interactive Component Selection: Choose from categorized homebrew components
- GitHub Integration: Automatically fetches latest releases from GitHub repositories
- Smart Caching: Reduces API calls with intelligent cache management
- Component Editor: Add, edit, and manage components through a built-in editor
- Rate Limit Handling: Gracefully handles GitHub API rate limits
- Custom Processing: Supports various file processing operations (unzip, copy, rename, etc.)
- Build Summary: Generates detailed reports of your custom pack contents
The script automatically installs required packages if they're missing:
requests- For API calls and downloadsquestionary- For interactive CLI menusrich- For beautiful terminal output
components.json- Component definitions (can be created via the editor)skeleton.zip- Base structure for HATS packslanguages.zip- Base language pack
- Download required files:
hatskit.py(for Python) ORHATSKit.exe(for Windows)skeleton.zipcomponents.jsonlanguages.zip
- Place all files in the same folder, extract the languages.zip
- Run the tool:
- Python:
python hatskit.py - Windows: Double-click
HATSKit.exe
- Python:
-
Install PyInstaller:
pip install pyinstaller
-
Build the executable:
pyinstaller --onefile --name HATSkit --noupx --clean --add-data "components.json;." --add-data "skeleton.zip;." --add-data "languages;languages" --icon icon.ico hatskit.py pyinstaller --onefile --windowed --name "Language Editor" --noupx --hidden-import googletrans --hidden-import httpx --icon lang.ico translate_json.py
-
The executable will be created in the
dist/folder
To avoid GitHub API rate limits and access private repositories, you'll need a Personal Access Token:
-
Click "Generate new token" → "Fine-grained personal access token"
-
Configure the token:
- Expiration: Choose your preferred duration
- Repository access: Select "Public Repositories" (or specific repos if needed)
- Repository permissions:
- Contents: Read
- Metadata: Read
- Account permissions: Leave as default
-
Click "Generate token" and copy it immediately
-
Enter this token when prompted by HATSKit
- Go to GitHub Settings > Personal Access Tokens > Tokens (classic)
- Click "Generate new token" → "Generate new token (classic)"
- Select scopes:
public_repo(for public repositories)repo(if you need private repository access)
- Generate and copy the token
Note: Keep your token secure and never share it publicly!
-
Load the HATS Pack Builder
- Select components from categorized lists
- Automatic version detection from GitHub releases
- Build custom HATS pack ZIP file
-
Load the Component Editor
- View all available components
- Add new components with wizard
- Edit existing component configurations
- Delete unwanted components
-
Clear Cache
- Force refresh of GitHub API data
- Useful when components aren't updating
-
Clear GitHub PAT
- Remove stored Personal Access Token
- Useful for switching accounts
- Launch HATSKit
- Select "Load the HATS Pack Builder"
- Enter your GitHub PAT when prompted (optional but recommended)
- Wait for component information to load
- Select desired components using the checkbox interface:
- Use arrow keys to navigate
- Press Space to select/deselect
- Press 'a' to toggle all
- Press 'i' to invert selection
- Press Enter to confirm
- Review your selections and proceed
- Wait for the build process to complete
- Find your custom pack as
HATS_Pack_Custom.zip
- Essential: Core system components and utilities
- Homebrew Apps: Applications and games
- Patches: System modifications and improvements
- Tesla Overlays: Switch overlay system components
- Payloads: Boot-time payloads and tools
{
"component_id": {
"name": "Component Name",
"description": "Component description",
"category": "Essential",
"default": true,
"source_type": "github_release",
"repo": "user/repository",
"tag": "v1.0.0",
"asset_pattern": "*.zip",
"processing_steps": [
{
"action": "unzip_to_root"
}
]
}
}unzip_to_root: Extract archive contents to build rootcopy_file: Copy file to specific locationunzip_to_folder: Extract to specific folderfind_and_copy: Find files matching pattern and copyfind_and_rename: Find and rename filesdelete_file: Remove specific files
# Clear cache on startup
python hatskit.py --clear-cache
# Or with executable
HATSkit.exe --clear-cacheHATS_Pack_Custom.zip: Your custom HATS packHATS_Pack_Contents.txt: Detailed build summaryhats_pack_cache.json: API response cachecomponents.json.bak: Backup of component file
"Rate limit exceeded"
- Solution: Use a GitHub Personal Access Token
"Component not found"
- Check if the GitHub repository still exists
- Verify the asset pattern matches available files
- Clear cache to refresh data
"Skeleton file not found"
- Ensure
skeleton.zipis in the same directory as the script - When building executable, verify the file is properly bundled
"Permission denied"
- Run with administrator privileges if needed
- Check file permissions in the script directory
The cache file (hats_pack_cache.json) stores GitHub API responses for 12 hours to reduce API calls. Use "Clear Cache" from the main menu or --clear-cache flag to force refresh.
To add new components:
- Use the built-in Component Editor
- Test your configurations thoroughly
- Share your
components.jsonadditions with the community
This tool is provided as-is for educational and personal use. Please respect the licenses of individual homebrew components and GitHub repositories.
- Check GitHub Issues for common problems
- Verify your
components.jsonsyntax with a JSON validator - Ensure all required files are present
- Test with a GitHub PAT if experiencing rate limits
If you find this project useful, please consider supporting me by buying me a coffee!
