4 routes

Resilient by design

Four ordered Composer endpoints — Composer transparently falls back to the next when one is slow or unreachable.

PHP

Frameworks first

Tested daily with Laravel, Symfony, WordPress, and the rest of the modern PHP stack.

Anonymous

No sign-in required

Public read access over HTTPS. No tokens to rotate, no rate limits, no surprises in CI.

Repository routes

List the routes in this exact order. Composer queries the first route, then walks down the list when a package is missing or a route is unhealthy.

1 · Jamko · primary
https://mirror.kargadan.ir/repository/composer-jamko/
2 · Chabokan
https://mirror.kargadan.ir/repository/composer-chabokan/
3 · Runflare
https://mirror.kargadan.ir/repository/composer-runflare/
4 · Packagist · safety net
https://mirror.kargadan.ir/repository/composer-original/

Quick start

Single route (global)

composer config -g repos.packagist composer https://mirror.kargadan.ir/repository/composer-jamko/

Resilient multi-route (project) — recommended

Add the four routes to your project and disable the default packagist.org so Composer never tries to reach it directly.

composer config repositories.packagist false
composer config repositories.kargadan-1 composer https://mirror.kargadan.ir/repository/composer-jamko/
composer config repositories.kargadan-2 composer https://mirror.kargadan.ir/repository/composer-chabokan/
composer config repositories.kargadan-3 composer https://mirror.kargadan.ir/repository/composer-runflare/
composer config repositories.kargadan-4 composer https://mirror.kargadan.ir/repository/composer-original/

Or paste straight into composer.json

{
    "repositories": [
        { "type": "composer", "url": "https://mirror.kargadan.ir/repository/composer-jamko/" },
        { "type": "composer", "url": "https://mirror.kargadan.ir/repository/composer-chabokan/" },
        { "type": "composer", "url": "https://mirror.kargadan.ir/repository/composer-runflare/" },
        { "type": "composer", "url": "https://mirror.kargadan.ir/repository/composer-original/" },
        { "packagist.org": false }
    ]
}

Frameworks

Laravel

composer config -g repos.packagist composer https://mirror.kargadan.ir/repository/composer-jamko/

composer create-project laravel/laravel myapp
cd myapp
composer require laravel/sanctum spatie/laravel-permission

Symfony

composer config -g repos.packagist composer https://mirror.kargadan.ir/repository/composer-jamko/

composer create-project symfony/skeleton myapp
cd myapp
composer require symfony/orm-pack symfony/security-bundle api-platform/api-pack

WordPress (with wpackagist)

{
    "repositories": [
        { "type": "composer", "url": "https://mirror.kargadan.ir/repository/composer-jamko/" },
        { "type": "composer", "url": "https://mirror.kargadan.ir/repository/composer-chabokan/" },
        { "type": "composer", "url": "https://mirror.kargadan.ir/repository/composer-original/" },
        { "type": "composer", "url": "https://wpackagist.org" },
        { "packagist.org": false }
    ],
    "require": {
        "php": "^8.2",
        "composer/installers": "^2.0",
        "wpackagist-plugin/advanced-custom-fields": "^6.0"
    }
}

Docker example

FROM php:8.3-fpm-alpine
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

RUN composer config -g repos.packagist composer \
        https://mirror.kargadan.ir/repository/composer-jamko/

WORKDIR /var/www
COPY composer.json composer.lock ./
RUN composer install --no-dev --no-scripts --prefer-dist --optimize-autoloader

COPY . .
RUN composer run-script post-autoload-dump --no-dev

CMD ["php-fpm"]

CI / CD

GitHub Actions

name: PHP Tests
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: shivammathur/setup-php@v2
        with:
          php-version: '8.3'
          extensions: mbstring, pdo, pdo_pgsql
      - name: Configure Composer mirror
        run: composer config -g repos.packagist composer https://mirror.kargadan.ir/repository/composer-jamko/
      - run: composer install --prefer-dist --no-progress
      - run: vendor/bin/phpunit

GitLab CI

build:
  image: composer:latest
  script:
    - composer config -g repos.packagist composer https://mirror.kargadan.ir/repository/composer-jamko/
    - composer install --prefer-dist --no-dev
  artifacts:
    paths: [vendor/]

test:
  image: php:8.3
  script:
    - vendor/bin/phpunit --coverage-text

Common commands

composer install
composer require monolog/monolog
composer require --dev phpstan/phpstan
composer update
composer update laravel/framework
composer remove unused/package
composer clear-cache
composer validate
composer show

Mirror information

Mirror typeMulti-route Four ordered Composer proxies
Routescomposer-jamko, composer-chabokan, composer-runflare, composer-original
AuthenticationNot required (anonymous read)
ProtocolsHTTPS · HTTP
Production tip

For production deployments use composer install --no-dev --prefer-dist --optimize-autoloader. It skips dev dependencies, prefers cached .zip distributions from the mirror, and emits an autoloader optimized for runtime.