# Martis > An MIT-licensed admin foundation for Laravel agencies. No paid tier. Martis is an open-source admin panel foundation for Laravel 12 and 13 with a React and TypeScript frontend, distributed as the Composer package martis/martis. Every page below is available as Markdown (the links), and as HTML at the same path without the .md suffix. A read-only documentation MCP server is described at https://getmartis.com/.well-known/mcp/server-card.json. ## Documentation - [Documentation](https://getmartis.com/docs.md): Install, configure and extend Martis. - [Installation Guide](https://getmartis.com/docs/getting-started/installation.md): Add Martis to any existing Laravel application as a Composer package. - [Quick Start](https://getmartis.com/docs/getting-started/quick-start.md): Build your first Martis resource in five minutes. - [Troubleshooting](https://getmartis.com/docs/getting-started/troubleshooting.md): Common problems when installing or running Martis, and how to fix them. - [Upgrading](https://getmartis.com/docs/getting-started/upgrading.md): The sections below list the breaking changes of each major version and what to change in an app. - [Resources — Complete Reference](https://getmartis.com/docs/core/resources.md): The Resource class is the core building block of Martis, and each resource maps to the Eloquent model you administer through it. It defines the model's CRUD interface, fields, authorization, and behavior. - [Fields — Complete Reference](https://getmartis.com/docs/core/fields.md): All available field types in Martis, their methods, and configuration options. - [Relationships](https://getmartis.com/docs/core/relationships.md): Martis has a field for every Eloquent relationship, from BelongsTo and HasMany to the polymorphic MorphTo and MorphToMany. This guide covers how each one is declared, how it renders (a picker, a card or an inline panel) and how it is authorized. - [Filters](https://getmartis.com/docs/core/filters.md): Filters allow users to narrow down resource index results by applying criteria. They appear as a collapsible panel on the resource index page with active filter pills for at-a-glance visibility. - [Lenses](https://getmartis.com/docs/core/lenses.md): Lenses are alternative, resource-scoped views onto the dataset of a Martis Resource. Every lens is a subclass that composes its own query, fields, filters, cards, actions and optional polling cadence. Martis adds a small set of extensions that are marked below. - [Metrics](https://getmartis.com/docs/core/metrics.md): Metrics compute and display analytical data on dashboards and resource index pages. Martis provides six built-in metric types: Value, Trend, Partition, Progress, ActivityFeed, and EndpointTable. - [Dashboards](https://getmartis.com/docs/core/dashboards.md): Dashboards are the pages that group metric cards, and Martis supports as many as you need. Each has its own set of cards, filters, and authorization. - [Soft-gates & badges](https://getmartis.com/docs/core/gates.md): Learn about Soft-gates & badges in Martis. - [Actions](https://getmartis.com/docs/core/actions.md): Martis Actions allow you to run custom operations on resources. Four distinct action types are supported: - [Default Row Actions](https://getmartis.com/docs/core/default-row-actions.md): Every Martis resource index ships with a trailing column of built-in row actions (View, Edit and Delete) out of the box. No registration required. Icons disable themselves automatically when the row's authorization denies the operation. - [Sticky Views](https://getmartis.com/docs/core/sticky-views.md): Sticky views keep a resource table as the user left it when they open a record and come back: same filter, same sort, same page, same search query. No need to redo the work. - [Grid Layout — Section & Field Span](https://getmartis.com/docs/core/grid-layout.md): Martis supports a flexible, grid-based form layout system that lets you organise fields into responsive multi-column rows inside create and update forms. - [Panels and Tabs](https://getmartis.com/docs/core/panels-and-tabs.md): Martis supports three layout mechanisms for organising fields on forms and detail pages: Panels, Tabs, and Sections. - [Repeater](https://getmartis.com/docs/core/repeater.md): Repeatable row widget backed by JSON, a child table (HasMany), or a single polymorphic child table. - [Menus](https://getmartis.com/docs/core/menus.md): Martis exposes a declarative, package-native navigation API. - [Global Search](https://getmartis.com/docs/core/global-search.md): Martis ships a single, unified search surface accessible from anywhere in the SPA via Cmd+K (macOS) / Ctrl+K (Windows / Linux) or /. It searches every resource the authenticated user can view, grouped by resource label, with optional Scout integration. - [Search performance on PostgreSQL](https://getmartis.com/docs/core/search-performance.md): Keep the database search of a large PostgreSQL table fast with trigram indexes, martis:search-index and searchMode(). - [Theming](https://getmartis.com/docs/customization/theming.md): Martis uses CSS custom properties (variables) for all styling. A theme is a CSS file that overrides these variables. Themes apply globally and support both dark and light modes. - [Override System](https://getmartis.com/docs/customization/overrides.md): The override system lets you replace any Martis React component or layout, and hook your own logic into server-side CRUD operations, from your application. Everything can be customized without forking, and it is a core Martis differential. - [Built-in Components Reference](https://getmartis.com/docs/customization/components.md): Martis ships with a set of React components that make up the admin panel UI. All components are designed to be replaceable through the Override System. - [Custom Tools](https://getmartis.com/docs/customization/tools.md): Pick a Tool when your page does not naturally map to a list of records. - [Fields in Tools](https://getmartis.com/docs/customization/tool-fields.md): Reuse any Martis Field, such as Slug, Text or BelongsTo, inside a custom Tool with the exact behaviour it has in a Resource form. Slugify, generate-from-source, dependsOn, validation display, i18n and theming all come from one shared code path. - [In-app Tools: when (and how) to use `boot()`](https://getmartis.com/docs/customization/tool-boot-patterns.md): An in-app Tool's setup code can live in the Tool's own boot() or in AppServiceProvider::boot(). This page says when each one runs and shows the four usual pieces (routes, gates, schedules and listeners) wired in a Tool's boot(). - [Custom pages at your own URLs](https://getmartis.com/docs/customization/custom-pages.md): Register a page of your application at a URL of its own below the Martis path, rendered inside the standard Martis shell. The route comes from your extension bundle, through routeRegistry on @martis/runtime (v2.2.0+). - [Testing extensions](https://getmartis.com/docs/customization/testing-extensions.md): Render your Martis extensions in Vitest or a Playwright page with the real runtime, its providers and its shims, and no server. - [Extensions: caching](https://getmartis.com/docs/customization/extensions-caching.md): Cache the extension bundle and its lazy chunks for a year, with headers that still let a deploy reach every browser (v2.20.0+). - [Loader](https://getmartis.com/docs/customization/loader.md): The Martis Loader is a built-in loading indicator that appears automatically during data fetches, page transitions, and async operations. It is fully configurable and replaceable without forking the package. - [Customising Martis Generators](https://getmartis.com/docs/customization/generators.md): Every Martis make-command (martis:resource, martis:action, martis:lens, martis:tool and the rest) renders a class from a .stub template in the package. This page shows how a project overrides those templates in stubs/martis/. - [Internationalisation](https://getmartis.com/docs/customization/i18n.md): Martis ships with three bundled locales (en, pt_PT, pt_BR) and exposes them in the user preferences panel. The system has three layers: PHP lang files (server strings), i18next resources (client strings), and the user preferences (per-user locale persistence). - [Agent guidelines and the Martis MCP server](https://getmartis.com/docs/customization/agent-guidelines.md): Martis ships a guidelines generator for five AI coding agents: Claude Code, Codex, Cursor, Gemini and Copilot. An optional MCP server exposes the package documentation over the Model Context Protocol. - [Authentication](https://getmartis.com/docs/auth/authentication.md): Martis provides a complete authentication system, from login and logout to two-factor authentication (2FA), magic links and a user profile page. Every part, browser-session management included, is configurable and overridable. - [SSO (Single Sign-On) — ⭐ Martis differential](https://getmartis.com/docs/auth/sso.md): Martis signs admin users in through an external identity provider. Azure AD ships built in; Google, GitHub, Okta or any other provider plugs in through MartisSso::extend(). Groups map to your roles (Spatie laravel-permission is detected) and martis:sso scaffolds the setup. - [Roles & Permissions Admin](https://getmartis.com/docs/auth/roles.md): One-shot generator that scaffolds an admin UI for users, roles, and permissions on top of spatie/laravel-permission. Resources land in a unified System sidebar group. - [Impersonation](https://getmartis.com/docs/auth/impersonation.md): Support, debugging, and customer-success workflows often need an operator to see exactly what another user sees. Impersonation is the right primitive when you trust the operator and audit-log every session. - [Invitations](https://getmartis.com/docs/auth/invitations.md): Invitations let a privileged operator bring users into an app that has no open /register page. The module is a package-owned InvitationManager plus a public accept screen, wired through the same RegistersUsers pipeline the rest of authentication uses. - [Authorization & Policies](https://getmartis.com/docs/auth/authorization.md): Martis authorizes through the standard Laravel policy system: every write-side endpoint consults a Laravel policy. The frontend receives the resolved booleans and hides or disables controls accordingly. - [Martis API — Overview](https://getmartis.com/docs/reference/api.md): Martis exposes a REST API for every CRUD operation, resource metadata, navigation, search, preferences, sessions, impersonation, and admin surfaces. The schema is generated at runtime by Scramble and served as both interactive UI and raw OpenAPI 3.1. - [Configuration](https://getmartis.com/docs/reference/configuration.md): Martis is configured through config/martis.php, which the installer publishes; most of its options also read an environment variable. Publish it with the bundled wrapper (or the standard vendor:publish if you prefer): - [Cache (⭐ Martis differential)](https://getmartis.com/docs/reference/cache.md): Most admin panels make caching opaque: TTLs hidden in code, invalidation by deploy, no kill-switch. Martis flips that: every cache layer has a name, an effective state, and a button. - [In-app Notifications](https://getmartis.com/docs/reference/notifications.md): Martis shows in-app notifications in a topbar bell, built on Laravel's standard notifications table since v0.8 (before it, only toasts). Anything you already deliver via the database channel surfaces in the bell with zero glue. - [Keyboard Shortcuts](https://getmartis.com/docs/reference/keyboard-shortcuts.md): Martis ships a tiny in-house registry for keyboard shortcuts. Every combo the admin shell, custom Tools, or consumer plugins want to bind goes through one API, so the help overlay (Shift+?) always lists the live set and conflict detection has a single point of truth. - [User Preferences](https://getmartis.com/docs/reference/preferences.md): Each admin user keeps their own interface preferences: theme, accent (or, when allowed, a brand colour), density, locale and reduced motion. The topbar overlay edits them, the server keeps them per user across devices, and a URL preset can override them for a shared link. - [Highlights](https://getmartis.com/docs/reference/differentials.md): A tour of the surfaces Martis ships beyond the bare-essential admin-panel contract, each a first-class API of the package. They come with their own configuration, generators, or escape hatches, and each entry below links into the dedicated reference for the full surface. ## Site - [Martis — The admin foundation your agency can ship again](https://getmartis.com/index.md): An MIT-licensed admin foundation for Laravel agencies. No paid tier. - [Product](https://getmartis.com/product.md): Model, operate, secure, adapt, extend and ship Laravel admin products. - [For Laravel Agencies](https://getmartis.com/for-agencies.md): A repeatable admin foundation for client delivery. - [Showcase · Built with Martis](https://getmartis.com/showcase.md): Real products running on Martis, with screens from their staging environments and what each one uses from the foundation. - [About](https://getmartis.com/about.md): Martis is an open-source, MIT-licensed admin foundation for Laravel, maintained by Luiz Moura. - [Terms and privacy](https://getmartis.com/legal.md): Terms of use of getmartis.com and how the site handles your data. - [Compare Martis](https://getmartis.com/compare.md): An evidence-based comparison of Laravel admin foundations. - [Martis vs Laravel Nova](https://getmartis.com/compare/nova.md): Compare licensing, stack, workflow and extensibility. - [Martis vs Filament](https://getmartis.com/compare/filament.md): Compare licensing, stack, workflow and extensibility. - [Changelog](https://getmartis.com/changelog.md): Product releases and upgrade notes. - [Contact](https://getmartis.com/contact.md): Talk to Martis about a repeatable Laravel delivery foundation for your agency. ## Optional - [Source code on GitHub](https://github.com/Real-Edge-FX/martis-package): the martis/martis package - [Package on Packagist](https://packagist.org/packages/martis/martis): install with composer require martis/martis