{"id":32542932,"url":"https://github.com/solrevdev/winget-search","last_synced_at":"2025-10-28T16:55:05.765Z","repository":{"id":296213810,"uuid":"992638999","full_name":"solrevdev/winget-search","owner":"solrevdev","description":"Searches winegt-pkgs and copies the winget install command ","archived":false,"fork":false,"pushed_at":"2025-10-23T02:37:29.000Z","size":2465,"stargazers_count":1,"open_issues_count":2,"forks_count":3,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-23T04:24:29.363Z","etag":null,"topics":["winget"],"latest_commit_sha":null,"homepage":"https://solrevdev.com/winget-search/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/solrevdev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"license.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-29T13:30:27.000Z","updated_at":"2025-06-02T07:36:24.000Z","dependencies_parsed_at":"2025-06-21T03:27:04.065Z","dependency_job_id":"1877fd69-3b84-4f5b-9dab-ee89bace5914","html_url":"https://github.com/solrevdev/winget-search","commit_stats":null,"previous_names":["solrevdev/winget-search"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/solrevdev/winget-search","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solrevdev%2Fwinget-search","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solrevdev%2Fwinget-search/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solrevdev%2Fwinget-search/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solrevdev%2Fwinget-search/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/solrevdev","download_url":"https://codeload.github.com/solrevdev/winget-search/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solrevdev%2Fwinget-search/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281476675,"owners_count":26508145,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-28T02:00:06.022Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["winget"],"created_at":"2025-10-28T16:55:04.319Z","updated_at":"2025-10-28T16:55:05.756Z","avatar_url":"https://github.com/solrevdev.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Summary\n\nThis project provides a fast, searchable web interface for Windows Package Manager (winget) packages. It uses GitHub Actions to:\n\n1. Automatically extract package data daily from the official winget repository\n2. Build a static site with the latest package information\n3. Deploy directly to GitHub Pages without any manual configuration\n\nThe entire process is automated - just push your code and GitHub Actions handles everything else!# Winget Package Web Search\n\nA fast, modern web search interface for [Windows Package Manager (winget)](https://github.com/microsoft/winget-pkgs) packages with instant copy-to-clipboard installation commands.\n\n## Features\n\n- 🔍 **Instant search** - Search by package ID, name, description, publisher, or tags\n- 📋 **One-click copy** - Copy `winget install` commands instantly\n- 🌐 **English-only results** - Filters to show only English package descriptions\n- 🔄 **Auto-updated** - Daily updates via GitHub Actions\n- 🌓 **Dark mode** - Automatic theme based on system preferences\n- 📱 **Mobile-friendly** - Responsive design for all devices\n- ⚡ **Fast \u0026 lightweight** - No frameworks, pure vanilla JavaScript\n- ⌨️ **Keyboard shortcuts** - Press `/` to search, `Esc` to clear\n\n## Live Demo\n\nVisit the live site: `https://YOUR_USERNAME.github.io/YOUR_REPO_NAME/`\n\n## How It Works\n\n1. **Data Extraction**: GitHub Actions runs daily to:\n   - Clone the official [microsoft/winget-pkgs](https://github.com/microsoft/winget-pkgs) repository\n   - Parse all YAML manifest files\n   - Extract package metadata (filtering for English descriptions)\n   - Generate a `packages.json` file with the latest versions only\n\n2. **Search Interface**: A static HTML page that:\n   - Loads the generated `packages.json`\n   - Provides instant client-side search\n   - Generates copy-ready `winget install` commands\n\n3. **Deployment**: The GitHub Actions workflow:\n   - Builds the site and generates `packages.json`\n   - Deploys directly to GitHub Pages using the `peaceiris/actions-gh-pages` action\n   - GitHub Pages automatically serves the site from the deployment\n   - No manual branch management needed - it's all automated!\n\n## Setup Instructions\n\n### Prerequisites\n\n- A GitHub account\n- A repository for this project\n\n### Installation\n\n1. **Fork or clone this repository**\n\n2. **Update the repository references**:\n   - In `index.html`, replace `YOUR_USERNAME/YOUR_REPO_NAME` with your actual GitHub username and repository name\n   - This appears in the footer link\n\n3. **Enable GitHub Actions**:\n   - Go to your repository's **Settings** \u003e **Actions** \u003e **General**\n   - Under \"Actions permissions\", select \"Allow all actions and reusable workflows\"\n   - Under \"Workflow permissions\", select \"Read and write permissions\"\n   - **Note**: No personal access token needed! The workflow uses GitHub's built-in `GITHUB_TOKEN`\n\n4. **Push to main branch**:\n   ```bash\n   git add .\n   git commit -m \"Initial setup\"\n   git push origin main\n   ```\n\n5. **Wait for the first build**:\n   - Go to the **Actions** tab in your repository\n   - You should see the \"Build and Deploy\" workflow running\n   - This first run will take a few minutes as it processes ~30,000+ packages\n\n6. **GitHub Pages will be automatically configured**:\n   - The workflow handles everything automatically\n   - Once the workflow completes, go to **Settings** \u003e **Pages**\n   - You should see \"Your site is live at https://YOUR_USERNAME.github.io/YOUR_REPO_NAME/\"\n   - Under \"Build and deployment\" \u003e \"Source\", it will show **GitHub Actions**\n   - No manual configuration needed!\n\n7. **Access your site**:\n   - Your site will be available at `https://YOUR_USERNAME.github.io/YOUR_REPO_NAME/`\n   - It may take a few minutes for GitHub Pages to activate after the first deployment\n\n## Customization\n\n### Modify Search Behavior\n\nEdit the `showResults()` function in `index.html` to customize search logic:\n\n```javascript\n// Current implementation searches in:\n// - Package ID\n// - Package name  \n// - Description\n// - Publisher\n// - Tags\n```\n\n### Change Update Schedule\n\nEdit `.github/workflows/github_workflows_build.yml` to modify the update schedule:\n\n```yaml\nschedule:\n    # Run at different time (e.g., every 6 hours)\n    - cron: '0 */6 * * *'\n```\n\n### Styling\n\nThe site uses CSS custom properties for theming. Modify the `:root` variables in `index.html` to customize colors.\n\n## Development\n\n### Local Testing\n\nYou can test locally using either traditional pip or modern uv (recommended).\n\n#### Option 1: Using uv (Recommended)\n\n[uv](https://github.com/astral-sh/uv) is a fast, modern Python package manager. If you have it installed:\n\n```bash\n# Clone winget-pkgs repository first (this will take a few minutes - it's a large repo)\ngit clone --depth 1 https://github.com/microsoft/winget-pkgs.git\n\n# Run the extraction script with uv (creates isolated environment automatically)\n# This uses Python 3.11 as specified in .python-version\nuv run extract_packages.py winget-pkgs/manifests/ packages.json\n\n# The extraction will take a few minutes and show progress:\n# Total manifest YAML files found: XXXXX\n# Total valid packages found: XXXXX\n# Unique packages extracted: XXXXX\n\n# Serve the site locally\nuv run python -m http.server 8000\n# or just use Python directly if you have it\npython3 -m http.server 8000\n\n# Visit http://localhost:8000 in your browser\n```\n\nFor a one-time run without creating a virtual environment:\n```bash\n# Run extraction with inline dependencies\nuvx --with pyyaml --with packaging --python 3.11 \\\n  python extract_packages.py winget-pkgs/manifests/ packages.json\n```\n\n#### Option 2: Using pip with virtual environment\n\n```bash\n# Create a virtual environment\npython3 -m venv venv\nsource venv/bin/activate  # On Windows: venv\\Scripts\\activate\n\n# Install dependencies\npip install -r requirements.txt\n\n# Clone winget-pkgs repository\ngit clone https://github.com/microsoft/winget-pkgs.git\n\n# Run extraction\npython extract_packages.py winget-pkgs/manifests/ packages.json\n\n# Serve locally\npython -m http.server 8000\n```\n\n#### Option 3: Using pip globally (not recommended)\n\n```bash\n# Install Python dependencies\npip install -r requirements.txt\n\n# Clone winget-pkgs and run extraction\ngit clone https://github.com/microsoft/winget-pkgs.git\npython extract_packages.py winget-pkgs/manifests/ packages.json\n\n# Serve locally\npython -m http.server 8000\n```\n\nAfter starting the server, open `http://localhost:8000` in your browser.\n\n### Project Structure\n\n```\n├── .github/\n│   └── workflows/\n│       ├── github_workflows_build.yml    # Main build workflow (automated deployment)\n│       └── github_workflows_pages_deploy.yml  # Manual trigger for re-deployment\n├── extract_packages.py    # Package extraction script\n├── index.html            # Search interface\n├── packages.json         # Generated package data (not in source)\n├── requirements.txt      # Python dependencies (pip)\n├── pyproject.toml        # Modern Python project config (uv)\n├── .python-version       # Python version for uv\n├── LICENSE              # MIT License\n└── README.md            # This file\n```\n\n**Note about workflows**: The main workflow (`github_workflows_build.yml`) handles everything automatically. The second workflow (`github_workflows_pages_deploy.yml`) is just a utility for forcing a re-deployment if ever needed.\n\n## Technical Details\n\n### Package Extraction\n\nThe extraction script (`extract_packages.py`):\n- Parses winget manifest YAML files\n- Filters for English-only descriptions (`.locale.en-US.yaml` files)\n- Deduplicates packages, keeping only the latest version\n- Uses proper semantic versioning comparison\n- Outputs a structured JSON with metadata\n\n### Performance\n\n- Initial load: ~5-10MB JSON file containing ~30,000+ packages\n- Search is performed client-side for instant results\n- Results are limited to 100 items for performance\n- Debounced search input (300ms) for smooth typing\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n### Ideas for Improvement\n\n- Add package categories/sections\n- Implement fuzzy search\n- Add sorting options (by name, downloads, date)\n- Show package icons/logos\n- Add \"copy as PowerShell\" option\n- Implement package details modal\n- Add search history\n- Export search results\n\n## Summary\n\nThis project provides a fast, searchable web interface for Windows Package Manager (winget) packages. It uses GitHub Actions to:\n\n1. Automatically extract package data daily from the official winget repository\n2. Build a static site with the latest package information  \n3. Deploy directly to GitHub Pages without any manual configuration\n\nThe entire process is automated - just push your code and GitHub Actions handles everything else!\n\n## License\n\nThis project is open source and available under the [MIT License](LICENSE).\n\n## Credits\n\n- Package data from [microsoft/winget-pkgs](https://github.com/microsoft/winget-pkgs)\n- Automated deployment using [GitHub Actions](https://github.com/features/actions) and [GitHub Pages](https://pages.github.com/)\n- [peaceiris/actions-gh-pages](https://github.com/peaceiris/actions-gh-pages) for seamless deployment\n\n## Troubleshooting\n\n### GitHub Pages not updating (shows old content)\n\nThis is a common issue, especially with custom domains. Try these solutions:\n\n1. **Check GitHub Pages status**:\n   - Go to Settings \u003e Pages\n   - Look for \"Your site is live at...\" message\n   - Check the \"Last deployed\" timestamp\n   - If it's old, the deployment isn't being detected\n\n2. **Force a rebuild**:\n   - Run the \"Trigger Pages Deploy\" workflow manually from the Actions tab\n   - Or make a small change to any file in the gh-pages branch\n\n3. **Clear CDN cache** (for custom domains):\n   - Custom domains use GitHub's CDN which can cache aggressively\n   - Wait 10-15 minutes for cache to expire\n   - Try accessing with `?v=timestamp` to bypass cache: `https://yourdomain.com/winget-search/?v=123`\n\n4. **Check deployment source**:\n   - In Settings \u003e Pages, try switching between \"Deploy from branch\" and \"GitHub Actions\"\n   - If using \"Deploy from branch\", ensure it's set to `gh-pages` branch and `/ (root)`\n\n5. **Verify files in gh-pages branch**:\n   - Check that the new files are actually in the gh-pages branch\n   - Look for the `:root` CSS variables in index.html\n   - Ensure there's a `.nojekyll` file (prevents Jekyll processing)\n\n6. **Browser cache**:\n   - Hard refresh: Ctrl+Shift+R (Windows/Linux) or Cmd+Shift+R (Mac)\n   - Open in incognito/private mode\n   - Check browser DevTools \u003e Network tab with \"Disable cache\" checked\n\n### GitHub Pages not showing or wrong deployment source\n\n- The workflow automatically configures GitHub Pages to use \"GitHub Actions\" as the source\n- If Pages shows \"Deploy from a branch\" instead, the site should still work\n- You can manually switch to \"GitHub Actions\" if needed, but it's not required\n- The `peaceiris/actions-gh-pages@v4` action handles the deployment regardless of the Pages setting\n\n### Python version mismatch\n\n- The project uses Python 3.11 (as specified in `.python-version` and GitHub Actions)\n- If you have a different Python version locally, `uv` will automatically download and use Python 3.11\n- If you prefer to use your system Python (3.12+), it should work fine, but test thoroughly\n\n### Build fails with \"packages.json not created\"\n\n- Check the Python error output in the Actions log\n- Ensure the winget-pkgs repository structure hasn't changed\n\n### Site shows \"Failed to load package data\"\n\n- Check if the GitHub Actions workflow completed successfully\n- Verify that GitHub Pages is enabled (Settings \u003e Pages)\n- Check that the site URL is correct: `https://YOUR_USERNAME.github.io/YOUR_REPO_NAME/`\n- Look at the browser console for any errors\n- The workflow creates everything automatically, so no manual branch management is needed\n\n### Search returns no results\n\n- Open browser console and check for JavaScript errors\n- Verify `packages.json` is loading correctly\n- Check if the JSON structure matches what the JavaScript expects\n\n### Updates not reflecting\n\n- The workflow runs daily at 2 AM UTC\n- You can manually trigger it from the Actions tab using \"Run workflow\"\n- Check the workflow run logs for any errors","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolrevdev%2Fwinget-search","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsolrevdev%2Fwinget-search","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolrevdev%2Fwinget-search/lists"}