> ## Documentation Index
> Fetch the complete documentation index at: https://filamentphp.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Getting Started

export const EditOnGitHub = ({version, path}) => {
  const url = `https://github.com/filamentphp/filament/edit/${version}/${path}`;
  return <div className="not-prose mt-16">
      <a href={url} target="_blank" rel="noopener noreferrer" className="inline-flex items-center gap-2 text-sm text-gray-500 transition hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" className="h-4 w-4">
          <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z" />
        </svg>
        Edit this page on GitHub
      </a>
    </div>;
};

export const Footer = () => {
  const sponsorsByTier = JSON.parse(`{
  "agency_partner": [
    {
      "name": "Kirschbaum",
      "url": "https://kirschbaumdevelopment.com/solutions/filament-development",
      "filename": "kirschbaum.svg"
    }
  ],
  "gold": [
    {
      "name": "Agiledrop",
      "url": "https://www.agiledrop.com/laravel?utm_source=filament",
      "filename": "agiledrop.svg"
    },
    {
      "name": "Baiz.ai",
      "url": "https://baiz.ai",
      "filename": "baiz-ai.svg"
    },
    {
      "name": "CMS Max",
      "url": "https://cmsmax.com?ref=filamentphp.com",
      "filename": "cms-max.svg"
    },
    {
      "name": "Mailtrap",
      "url": "https://mailtrap.io/email-sending?utm_source=community&utm_medium=referral&utm_campaign=filament",
      "filename": "mailtrap.svg"
    },
    {
      "name": "SerpApi",
      "url": "https://serpapi.com/?utm_source=filamentphp",
      "filename": "serpapi.svg"
    }
  ]
}`);
  function shuffleArray(items) {
    const result = [...items];
    for (let index = result.length - 1; index > 0; index--) {
      const randomIndex = Math.floor(Math.random() * (index + 1));
      [result[index], result[randomIndex]] = [result[randomIndex], result[index]];
    }
    return result;
  }
  const sponsors = Object.entries(sponsorsByTier).flatMap(([, sponsors]) => shuffleArray(sponsors));
  return <div className="mt-16 flex flex-col gap-4">
      <h2 className="text-center text-2xl font-medium text-gray-800 dark:text-gray-200">
        Sponsored by
      </h2>

      <div className="not-prose flex flex-wrap items-center justify-center gap-5">
        {sponsors.map(sponsor => <a key={sponsor.name} className="footer-sponsor-card" href={sponsor.url} target="_blank" title={sponsor.name}>
            <img src={`/docs/images/sponsors/footer/${sponsor.filename}`} alt={sponsor.name} noZoom />
            <span className="line-pattern-overlay line-pattern-80" />
          </a>)}

        <a href="https://github.com/sponsors/danharrin" target="_blank" className="footer-sponsor-cta">
          <span className="sponsor-cta-content">
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
              <path d="M5 12h14" />
              <path d="M12 5v14" />
            </svg>
            <span>Your logo here</span>
          </span>
          <span className="line-pattern-overlay line-pattern-60" />
        </a>
      </div>
    </div>;
};

<Warning>
  You are currently viewing the documentation for Filament 1.x, which is a previous version of Filament.

  Looking for the current stable version? Visit the [5.x documentation](/docs/5.x/getting-started).
</Warning>

Filament is a content management framework for rapidly building a beautiful administration interface designed for humans.

> Filament requires Laravel 8.x or higher, and PHP 7.4 or higher.

Installation:

```bash theme={"theme":"gruvbox-dark-hard"}
composer require filament/filament
php artisan migrate
```

Create an administrator account for your admin panel by running

```bash theme={"theme":"gruvbox-dark-hard"}
php artisan make:filament-user
```

and answering the input prompts. Administrators have access to all areas of Filament, and are able to manage other users.

Once you have a user account, you can sign in to the admin panel by visiting `/admin` in your browser.

To start building your admin panel, [create a resource](./resources).

## Configuration

If you'd like to expose advanced configuration options for Filament, you may publish its configuration file:

```bash theme={"theme":"gruvbox-dark-hard"}
php artisan vendor:publish --tag=filament-config
```

> If you have published the configuration file for Filament, please ensure that you republish it when you upgrade.

## Users

By default, Filament includes its own authentication guard and users table that is completely separate from your app's users table. This enables you to get up and running with Filament at record speed.

Some projects may choose to allow their app users access to Filament. In this case, they may customize the auth guard that Filament uses by [configuring](#configuration) `auth.guard` to the name of your default guard, typically `web`.

The next step is to prepare your `User` model for use with Filament. Implement the `Filament\Models\Contracts\FilamentUser` interface, and apply the `Filament\Models\Concerns\IsFilamentUser` trait. These provide Filament with an API that it can use to interact with your existing user data:

```php theme={"theme":"gruvbox-dark-hard"}
<?php

namespace App\Models;

use Filament\Models\Concerns\IsFilamentUser;
use Filament\Models\Contracts\FilamentUser;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements FilamentUser
{
    use IsFilamentUser;

    // ...
}
```

By default, all users will be able to sign in to Filament. To change this, you may set the static `$filamentUserColumn` property on your custom user class to the name of a boolean column in your database:

```php theme={"theme":"gruvbox-dark-hard"}
public static $filamentUserColumn = 'is_filament_user'; // The name of a boolean column in your database.
```

Alternatively, you may override the `canAccessFilament()` on your custom user class, returning a boolean:

```php theme={"theme":"gruvbox-dark-hard"}
public function canAccessFilament()
{
    return $this->group === 'Filament Users';
}
```

Filament implements authorization features in its default users table. Admin users are able to access all areas of Filament, and manage other users. Users may have roles, which are associated with certain permissions in your admin panel.

To configure columns to granting users admin permissions and roles, you may set the static `$filamentAdminColumn` and `$filamentRolesColumn` properties on your class:

```php theme={"theme":"gruvbox-dark-hard"}
public static $filamentAdminColumn = 'is_filament_admin'; // The name of a boolean column in your database.

public static $filamentRolesColumn = 'filament_roles'; // The name of a JSON column in your database.
```

To disable roles and admin features, just omit these properties from your class.

Alternatively, you may specify custom logic for calculating if a user has admin permissions by overriding the `isFilamentAdmin()` method:

```php theme={"theme":"gruvbox-dark-hard"}
public function isFilamentAdmin()
{
    return $this->email === 'dan@danharrin.com';
}
```

Finally, for the correct reset password URL to be sent, you should implement a `sendPasswordResetNotification($token)` function. You can use the `Filament\Models\Concerns\SendsFilamentPasswordResetNotification` trait to add this functionality to your User model, fully integrated with Filament:

```php theme={"theme":"gruvbox-dark-hard"}
<?php

namespace App\Models;

use Filament\Models\Concerns\IsFilamentUser;
use Filament\Models\Concerns\SendsFilamentPasswordResetNotification;
use Filament\Models\Contracts\FilamentUser;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements FilamentUser
{
    use IsFilamentUser;
    use SendsFilamentPasswordResetNotification;

    // ...
}
```

### Disabling the Default Migrations

You may wish to prevent the migration for the default users table from being registered. You may do this by calling:

```php theme={"theme":"gruvbox-dark-hard"}
use Filament\Filament;

Filament::ignoreMigrations();
```

from the `register()` method of your `AppServiceProvider`.

## Stubs

Filament commands use stubs as templates when creating new files in your project. You may customize these stubs by publishing them to your app:

```bash theme={"theme":"gruvbox-dark-hard"}
php artisan vendor:publish --tag=filament-stubs
```

> If you have published the stubs for Filament, please ensure that you republish them when you upgrade.

## Upgrade Guide

To upgrade Filament to the latest version, you may run:

```bash theme={"theme":"gruvbox-dark-hard"}
php artisan filament:upgrade
```

or the following commands manually:

```bash theme={"theme":"gruvbox-dark-hard"}
composer update
php artisan migrate
php artisan livewire:discover
php artisan route:clear
php artisan view:clear
```

<EditOnGitHub version="1.x" path="docs/01-getting-started.md" />

<Footer />
