π¬π§ English | πΉπ· TΓΌrkΓ§e
Simplify software installation across Linux, Windows, and macOS with official repositories.
RepoHub provides a unified interface for package discovery and installation across different operating systems.
- Cross-Platform Support: Works on Linux (Debian, Ubuntu, Arch, Fedora), Windows, and macOS.
- Official Repositories: Access software strictly from trusted, official sources.
- Package Icons: Visual icons for popular packages for easy recognition.
- Script Generation: Generate idempotent installation scripts for your selected platform.
- Smart Filtering: efficiently browse and filter packages.
- Framework: Next.js 14+ (React)
- Styling: Tailwind CSS
- Icons: Lucide React
- State Management: React Query + Zustand
- Runtime: Node.js (TypeScript)
- Database: PostgreSQL
- Infrastructure: Docker
- Node.js 18+
- pnpm
- Docker (optional, for database)
-
Clone the repository:
git clone https://github.com/yusufipk/RepoHub.git cd RepoHub -
Install dependencies:
pnpm install
-
Set up Environment Variables: Copy
.env.exampleto.envand configure your database connection.cp .env.example .env
-
Initialize the Database: Run the initialization script to set up the database schema and apply migrations.
pnpm init:db
-
Run the development server:
pnpm dev
Open http://localhost:3000 with your browser to see the result.
You can trigger a repository sync using the API. This is useful for updating the package database.
Endpoint: POST /api/sync
Headers:
Content-Type:application/jsonx-sync-secret: Your sync secret key (required ifSYNC_SERVER_ONLY=true)
Body Parameters:
platform: The platform to sync. Options:debian: Sync Debian packages (Official Repo)ubuntu: Sync Ubuntu packages (Official Repo)arch: Sync Arch Linux packages (Official Repo)aur: Sync Arch User Repository (AUR) packagesfedora: Sync Fedora packages (Official Repo)windows: Sync Windows packages (Winget)macos: Sync macOS packages (Homebrew)all: Sync all platforms
Example Request:
curl -X POST http://localhost:3000/api/sync \
-H "Content-Type: application/json" \
-H "x-sync-secret: your_secret_key" \
-d '{"platform": "all"}'πΉπ· TΓΌrkΓ§e README | π¬π§ English
RepoHub uses curated package lists to provide personalized recommendations to users. You can help improve these recommendations by adding packages!
Package recommendations are stored in /src/data/recommendationPresets.ts. Here's how to add a package:
Navigate to the platform and category where your package belongs:
export const PACKAGE_PRESETS = {
windows: {
development: ["Git.Git", "Microsoft.VisualStudioCode"],
design: ["GIMP.GIMP", "Inkscape.Inkscape"],
// ... other categories
},
// ... other platforms
}Available Platforms:
windows- Windows (Winget)macos- macOS (Homebrew)ubuntu- Ubuntu (APT)debian- Debian (APT)arch- Arch Linux (Pacman/AUR)fedora- Fedora (DNF)
Available Categories:
development- Dev tools, IDEs, compilersdesign- Graphics, creative softwaremultimedia- Media players, editorssystem-tools- System utilitiesgaming- Game launchers, platformsproductivity- Office, browsers, productivity appseducation- Educational software
Package name formats by platform:
- Windows:
Publisher.PackageName(e.g.,Microsoft.VisualStudioCode) - macOS: lowercase-with-hyphens (e.g.,
visual-studio-code) - Linux: lowercase, varies by distro (e.g.,
code,docker.io)
Option A: Using the Validation Script (Recommended)
If you have access to the database:
# Validate specific platform
npm run validate:presets -- windows
# Validate multiple platforms
npm run validate:presets -- ubuntu debian arch
# Validate all platforms
npm run validate:presets -- --allThe script will show:
- β Packages found in database
- β Packages not found
- π‘ Similar package suggestions
Option B: Manual Verification
If you don't have database access:
- Search on the live RepoHub website
- Find your package in the search results
- Copy the exact package name displayed
- Or check official package repositories:
- Windows: winget.run
- macOS:
brew search <package> - Ubuntu/Debian:
apt search <package> - Arch: archlinux.org/packages
- Fedora: packages.fedoraproject.org
Simply add the package name to the array:
windows: {
development: [
"Git.Git",
"Microsoft.VisualStudioCode",
"Docker.DockerDesktop" // β Your new package
]
}To make the package look better in recommendations, add an icon mapping in PACKAGE_ICONS:
- Find the package slug on Simple Icons
- Add it to the
PACKAGE_ICONSobject in src/data/recommendationPresets.ts:
export const PACKAGE_ICONS: Record<string, string> = {
// ...
"Docker.DockerDesktop": "docker", // Key matches package name, Value is Simple Icons slug
// ...
};If no icon is added, a default package icon will be used.
-
Run validation:
npm run validate:presets -- windows
-
Start the dev server:
npm run dev
-
Test in the app:
- Complete onboarding
- Select the relevant category
- Check if your package appears in recommendations
DO β
- Verify package names using the validation script
- Add popular, well-maintained packages
- Test before submitting
- Use exact package names from official repos
DON'T β
- Don't guess package names
- Don't add deprecated packages
- Don't skip verification
- Don't add duplicates across categories
Add Popular Development Tools to Windows Recommendations
- Added Docker.DockerDesktop to development
- Added Postman.Postman to development
- Validation: β
All packages verified (100% found)
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the project
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request