PHPackages                             jeffersongoncalves/filament-satis - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [DevOps &amp; Deployment](/categories/devops)
4. /
5. jeffersongoncalves/filament-satis

ActiveLibrary[DevOps &amp; Deployment](/categories/devops)

jeffersongoncalves/filament-satis
=================================

A Filament plugin for managing private Composer repositories with Satis

3.12.0(2mo ago)754MITPHPPHP ^8.2CI passing

Since Feb 16Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/jeffersongoncalves/filament-satis)[ Packagist](https://packagist.org/packages/jeffersongoncalves/filament-satis)[ Docs](https://github.com/jeffersongoncalves/filament-satis)[ GitHub Sponsors](https://github.com/jeffersongoncalves)[ RSS](/packages/jeffersongoncalves-filament-satis/feed)WikiDiscussions 3.x Synced 1mo ago

READMEChangelog (10)Dependencies (20)Versions (71)Used By (0)

[![Filament Satis](https://raw.githubusercontent.com/jeffersongoncalves/filament-satis/3.x/art/jeffersongoncalves-filament-satis.jpg)](https://raw.githubusercontent.com/jeffersongoncalves/filament-satis/3.x/art/jeffersongoncalves-filament-satis.jpg)

Filament Satis
==============

[](#filament-satis)

[![Latest Version on Packagist](https://camo.githubusercontent.com/333ed5e9cce05b51e6af9f8c5e48afefe5aeb37d7bdd8c8f98adaf6329916962/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6a6566666572736f6e676f6e63616c7665732f66696c616d656e742d73617469732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/jeffersongoncalves/filament-satis)[![GitHub Tests Action Status](https://camo.githubusercontent.com/62e6c0680de789199d62dd6928d04ec2a55698fae17bfce8903310cf6c426a22/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6a6566666572736f6e676f6e63616c7665732f66696c616d656e742d73617469732f74657374732e796d6c3f6272616e63683d332e78266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/jeffersongoncalves/filament-satis/actions?query=workflow%3Atests+branch%3A3.x)[![GitHub Code Style Action Status](https://camo.githubusercontent.com/0afbd5a68a34b96b07360d0706f3351e881bf035967fd6ac148f334f0392d0bd/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6a6566666572736f6e676f6e63616c7665732f66696c616d656e742d73617469732f6669782d7068702d636f64652d7374796c652d6973737565732e796d6c3f6272616e63683d332e78266c6162656c3d636f64652532307374796c65267374796c653d666c61742d737175617265)](https://github.com/jeffersongoncalves/filament-satis/actions?query=workflow%3Afix-php-code-style-issues+branch%3A3.x)[![Total Downloads](https://camo.githubusercontent.com/cb6dd69fef82e6f640049a9bdbe054366bc6133c6273e48647799d884e246df9/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6a6566666572736f6e676f6e63616c7665732f66696c616d656e742d73617469732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/jeffersongoncalves/filament-satis)[![License](https://camo.githubusercontent.com/7cb1761d1f07513287829643532fd1847cacaee26300da7c0fc6ac485377c277/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6a6566666572736f6e676f6e63616c7665732f66696c616d656e742d73617469732e7376673f7374796c653d666c61742d737175617265)](LICENSE.md)

A [Filament](https://filamentphp.com) plugin for managing private Composer repositories powered by [Satis](https://github.com/composer/satis).

Features
--------

[](#features)

- **Package Management** — Add and manage Composer &amp; GitHub package sources with CRUD operations
- **Token-Based Auth** — Secure access with per-token package scoping
- **Dev Packages** — Mark packages as development-only with `is_dev` flag
- **Version Tracking** — Automatic tracking of package releases synced from Satis builds
- **Download Statistics** — Per-version download tracking and analytics
- **Dependency Mapping** — Public/private dependency classification from package releases
- **Multi-Tenancy** — Tenant-isolated data with configurable foreign keys
- **Credential Validation** — Verify package accessibility with tracked validation timestamps
- **Intelligent Validation** — Timestamp-based comparison to skip unnecessary rebuilds
- **Auth.json Support** — Automatic auth.json generation for authenticated Composer builds
- **Credential Sanitization** — Remove transport-options from Satis JSON files to prevent credential leaks
- **GitHub Webhooks** — Auto-rebuild on push, release and create events with HMAC-SHA256 signature validation
- **Per-Resource Config** — Customize navigation, icons, slugs, clusters, and visibility per resource
- **Global Search** — Search packages, tokens, releases, and dependencies from the global search bar
- **Bilingual** — English and Brazilian Portuguese translations included
- **Laravel Boost** — AI guidelines and skills for assisted development

Version Compatibility
---------------------

[](#version-compatibility)

Plugin VersionFilamentLaravelPHP1.x^3.0^10 | ^11 | ^12^8.12.x^4.0^11.0^8.23.x^5.0^11.28^8.3Requirements
------------

[](#requirements)

- PHP `^8.3`
- Laravel `^11.28`
- Filament `^5.0`
- [jeffersongoncalves/laravel-satis](https://github.com/jeffersongoncalves/laravel-satis) `^1.0`

Installation
------------

[](#installation)

You can install the package via composer:

### 1. Require the packages

[](#1-require-the-packages)

```
composer require jeffersongoncalves/filament-satis
```

This will automatically install `jeffersongoncalves/laravel-satis` as a dependency.

### 2. Publish and run migrations

[](#2-publish-and-run-migrations)

```
php artisan vendor:publish --tag="satis-migrations"
php artisan migrate
```

### 3. Publish the config (optional)

[](#3-publish-the-config-optional)

```
php artisan vendor:publish --tag="filament-satis-config"
php artisan vendor:publish --tag="satis-config"
```

Quick Start
-----------

[](#quick-start)

### 1. Register the plugin

[](#1-register-the-plugin)

Add the plugin to your Filament panel provider:

```
use JeffersonGoncalves\FilamentSatis\FilamentSatisPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugins([
            FilamentSatisPlugin::make(),
        ]);
}
```

### 2. Create packages and tokens

[](#2-create-packages-and-tokens)

1. Navigate to **Satis &gt; Packages** in the admin panel
2. Add a package with its repository URL
3. Navigate to **Satis &gt; Tokens** and create an authentication token
4. Associate the token with the packages it should access

### 3. Build the repository

[](#3-build-the-repository)

```
php artisan satis:build
```

### 4. Configure your client

[](#4-configure-your-client)

In your client project's `composer.json`:

```
{
    "repositories": [
        {
            "type": "composer",
            "url": "https://your-app.com/satis"
        }
    ]
}
```

Authenticate with the token:

```
composer config http-basic.your-app.com token "your-64-char-token-here"
```

Multi-Tenancy
-------------

[](#multi-tenancy)

Enable tenant isolation for packages, tokens, and builds:

```
use JeffersonGoncalves\FilamentSatis\FilamentSatisPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugins([
            FilamentSatisPlugin::make()
                ->tenancy(
                    enabled: true,
                    model: \App\Models\Team::class,
                    foreignKey: 'team_id'
                ),
        ]);
}
```

The plugin automatically:

- Sets the `satis` tenancy configuration during `register()`
- Configures the tenant resolver using `filament()->getTenant()` during `boot()`
- Scopes all queries and auto-sets the foreign key on creation

Configuration
-------------

[](#configuration)

### Filament Plugin Config

[](#filament-plugin-config)

The `config/filament-satis.php` file provides per-resource customization:

```
return [
    // Shared navigation group for all resources
    'navigation_group' => 'Satis',

    // Per-resource configuration
    'package_resource' => [
        'cluster' => null,                        // Filament cluster class
        'should_register_navigation' => true,     // Show in sidebar
        'navigation_icon' => 'heroicon-o-cube',   // Heroicon name
        'navigation_sort' => 1,                   // Sort order
        'slug' => 'satis/packages',               // URL slug
    ],

    'token_resource' => [
        'cluster' => null,
        'should_register_navigation' => true,
        'navigation_icon' => 'heroicon-o-key',
        'navigation_sort' => 2,
        'slug' => 'satis/tokens',
    ],

    'package_release_resource' => [
        'cluster' => null,
        'should_register_navigation' => true,
        'navigation_icon' => 'heroicon-o-tag',
        'navigation_sort' => 3,
        'slug' => 'satis/package-releases',
    ],

    'package_download_resource' => [
        'cluster' => null,
        'should_register_navigation' => true,
        'navigation_icon' => 'heroicon-o-arrow-down-tray',
        'navigation_sort' => 4,
        'slug' => 'satis/package-downloads',
    ],

    'dependency_resource' => [
        'cluster' => null,
        'should_register_navigation' => true,
        'navigation_icon' => 'heroicon-o-link',
        'navigation_sort' => 5,
        'slug' => 'satis/dependencies',
    ],
];
```

### Laravel Satis Config

[](#laravel-satis-config)

The `config/satis.php` file configures the core backend:

```
return [
    // Multi-tenancy
    'tenancy' => [
        'enabled' => false,
        'model' => null,
        'foreign_key' => null,
        'ownership_relationship' => null,
        'resolver' => null,
    ],

    // Database table prefix (set to null for unprefixed tables)
    'table_prefix' => 'satis_',

    // Override default model classes
    'models' => [
        'package' => \JeffersonGoncalves\LaravelSatis\Models\Package::class,
        'token' => \JeffersonGoncalves\LaravelSatis\Models\Token::class,
        // ...
    ],

    // Storage for Satis builds
    'storage_disk' => 'local',
    'storage_path' => 'satis',

    // Satis build configuration
    'satis' => [
        'name' => 'my/repository',
        'output_html' => false,
        'archive' => ['directory' => 'archives', 'skip_dev' => true],
        'minimum_stability' => 'stable',
        'secure_http' => false,
    ],

    // Queue settings
    'queue' => [
        'connection' => null,
        'queue_name' => null,
        'timeout' => 86400, // 24 hours
    ],

    // Scheduled command frequencies
    'schedule' => [
        'build' => 'weekly',
        'token_build' => 'weekly',
        'validate' => 'hourly',
        'sanitize' => 'daily',
        'dependencies' => 'weekly',
    ],

    // Auth guard and provider
    'auth' => ['guard' => 'satis-token', 'provider' => 'satis-tokens'],

    // Route prefixes and middleware (set composer_prefix to null for no prefix)
    'routes' => [
        'api_prefix' => 'api/satis',
        'composer_prefix' => 'satis',
        'middleware' => ['api'],
    ],
];
```

Resources
---------

[](#resources)

The plugin registers 5 Filament resources:

ResourceOperationsDescription**PackageResource**List, Create, View, Edit, DeleteManage Composer &amp; GitHub package sources**TokenResource**List, Create, View, Edit, DeleteManage authentication tokens with package scoping**PackageReleaseResource**List, ViewView package versions synced from Satis builds**PackageDownloadResource**ListView per-version download statistics**DependencyResource**List, ViewView public/private dependency mapping### Relation Managers

[](#relation-managers)

- **PackageResource** includes `ReleasesRelationManager` and `DownloadsRelationManager`
- **DependencyResource** includes `PackageReleasesRelationManager`

Customization Examples
----------------------

[](#customization-examples)

### Hide a resource from navigation

[](#hide-a-resource-from-navigation)

```
// config/filament-satis.php
'package_download_resource' => [
    'should_register_navigation' => false,
    // ...
],
```

### Change navigation icons

[](#change-navigation-icons)

```
'package_resource' => [
    'navigation_icon' => 'heroicon-o-archive-box',
    // ...
],
```

### Group resources in a cluster

[](#group-resources-in-a-cluster)

```
'package_resource' => [
    'cluster' => \App\Filament\Clusters\SatisCluster::class,
    // ...
],
'token_resource' => [
    'cluster' => \App\Filament\Clusters\SatisCluster::class,
    // ...
],
```

### Change the navigation group

[](#change-the-navigation-group)

```
'navigation_group' => 'Package Management',
```

### Override model classes

[](#override-model-classes)

```
// config/satis.php
'models' => [
    'package' => \App\Models\CustomPackage::class,
],
```

Custom models must extend the base models from the package.

Translations
------------

[](#translations)

The plugin includes English and Brazilian Portuguese translations.

### Publish translations

[](#publish-translations)

```
php artisan vendor:publish --tag="filament-satis-translations"
```

Translation files use the `filament-satis::` namespace:

```
__('filament-satis::package.navigation_label')
__('filament-satis::package.fields.name')
__('filament-satis::general.created_at')
```

Commands
--------

[](#commands)

CommandDescription`php artisan satis:build`Build Satis repository (tenant-based)`php artisan satis:build --tenant=1`Build for a specific tenant`php artisan satis:token-build`Build Satis repository (token-based)`php artisan satis:token-build --token=5`Build for a specific token`php artisan satis:validate`Validate builds and trigger rebuilds if needed`php artisan satis:clean`Clean all Satis builds from storage`php artisan satis:clean --force`Force clean without confirmation`php artisan satis:sanitize`Remove credentials from Satis JSON files`php artisan dependency:packages`Process and sync package dependenciesGitHub Webhooks
---------------

[](#github-webhooks)

Each package auto-generates a `webhook_secret` and `reference`. Configure your GitHub webhook:

- **URL:** `https://your-app.com/api/satis/webhooks/github/{reference}`
- **Secret:** The `webhook_secret` from the package edit form
- **Events:** Push, Release, Create
- **Content Type:** `application/json`

The webhook handler:

1. Validates the package is a GitHub type
2. Filters supported events (`push`, `release`, `create`)
3. Verifies HMAC-SHA256 signature when a secret is configured
4. Dispatches tenant and token rebuilds

Laravel Boost Integration
-------------------------

[](#laravel-boost-integration)

This package includes [Laravel Boost](https://laravel.com/docs/12.x/boost) guidelines and skills for AI-assisted development. When Boost is installed in your project, run:

```
php artisan boost:install
```

The plugin's AI guidelines and skills will be automatically detected and available to your coding agent.

Testing
-------

[](#testing)

```
composer test
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](.github/CONTRIBUTING.md) for details.

Security Vulnerabilities
------------------------

[](#security-vulnerabilities)

Please review [our security policy](../../security/policy) on how to report security vulnerabilities.

Credits
-------

[](#credits)

- [Jefferson Goncalves](https://github.com/jeffersongoncalves)
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

46

—

FairBetter than 93% of packages

Maintenance88

Actively maintained with recent releases

Popularity15

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity61

Established project with proven stability

 Bus Factor1

Top contributor holds 95% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

69

Last Release

50d ago

Major Versions

1.11.0 → 3.11.12026-02-18

1.11.1 → 3.10.22026-02-24

2.11.2 → 3.11.22026-03-04

1.12.0 → 2.12.02026-03-14

2.12.0 → 3.12.02026-03-14

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/411493?v=4)[Jefferson Gonçalves](/maintainers/jeffersongoncalves)[@jeffersongoncalves](https://github.com/jeffersongoncalves)

---

Top Contributors

[![jeffersongoncalves](https://avatars.githubusercontent.com/u/411493?v=4)](https://github.com/jeffersongoncalves "jeffersongoncalves (96 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (4 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (1 commits)")

---

Tags

composerfilamentfilament-pluginlaravelpackage-managementphpprivate-packagessatiscomposerlaravelrepositorysatisfilamentprivate-packages

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/jeffersongoncalves-filament-satis/health.svg)

```
[![Health](https://phpackages.com/badges/jeffersongoncalves-filament-satis/health.svg)](https://phpackages.com/packages/jeffersongoncalves-filament-satis)
```

###  Alternatives

[bezhansalleh/filament-shield

Filament support for `spatie/laravel-permission`.

2.8k2.9M88](/packages/bezhansalleh-filament-shield)[jibaymcs/filament-tour

Bring the power of DriverJs to your Filament panels and start a tour !

12247.8k](/packages/jibaymcs-filament-tour)[guava/filament-modal-relation-managers

Allows you to embed relation managers inside filament modals.

7565.0k4](/packages/guava-filament-modal-relation-managers)[mwguerra/filemanager

A full-featured file manager package for Laravel and Filament v5 with dual operating modes, drag-and-drop uploads, S3/MinIO support, and comprehensive security features.

718.5k1](/packages/mwguerra-filemanager)[agencetwogether/hookshelper

Simple plugin to toggle display hooks available in current page.

2312.7k](/packages/agencetwogether-hookshelper)[tapp/filament-webhook-client

Add a Filament resource and a policy for Spatie Webhook client

1120.2k](/packages/tapp-filament-webhook-client)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
