A powerful React admin panel framework inspired by FilamentPHP - Build beautiful admin interfaces with minimal code.
Filact is a modern, type-safe React framework for building admin panels and back-office applications. Inspired by Laravel's FilamentPHP, it provides a declarative API to create complete CRUD interfaces with minimal boilerplate.
- π Rapid Development - Build complete admin panels in minutes, not days
- π Complete CRUD - Full create, read, update, delete operations out of the box
- π¨ Type-Safe - Built with TypeScript for excellent IntelliSense and type safety
- π Flexible Data Layer - REST and GraphQL providers with custom adapter support
- π Declarative Forms - Build complex forms with simple schema definitions
- π Powerful Tables - Sortable, filterable, paginated tables with search
- π― Actions System - Page, row, and bulk actions with confirmation dialogs
- π Authorization - Built-in policy-based permission system
- πͺ Lifecycle Hooks - React to data operations (beforeCreate, afterUpdate, etc.)
- β‘ Optimized Performance - TanStack Query for caching and optimistic updates
- π§© React Hook Form - Performant form state management
- β Validation - Zod integration for runtime type checking
- βΏ Accessible - WCAG 2.1 Level AA compliant components
- π¨ Beautiful UI - Modern interface with shadcn/ui components
- π± Responsive - Mobile-first design that works on all devices
- π§ͺ Well Tested - 123+ tests covering unit, integration, E2E, and accessibility
Filact is a monorepo containing multiple packages:
- @filact/core - Core library with data management, forms, tables, and hooks
- @filact/ui - UI components built with shadcn/ui (coming soon)
- @filact/cli - CLI tools for scaffolding (coming soon)
npm install @filact/core react react-dom
# or
pnpm add @filact/core react react-domimport { createResource, createRestDataProvider, useResourceList } from '@filact/core'
import { z } from 'zod'
// 1. Define your model
interface User {
id: number
name: string
email: string
role: 'admin' | 'user'
}
// 2. Create data provider
const dataProvider = createRestDataProvider({
baseURL: 'https://api.example.com',
})
// 3. Build resource
const userResource = createResource<User>(
{
name: 'User',
pluralName: 'Users',
endpoint: 'users',
primaryKey: 'id',
},
dataProvider
)
.form({
fields: [
{ name: 'name', label: 'Name', type: 'text', required: true },
{ name: 'email', label: 'Email', type: 'email', required: true },
{ name: 'role', label: 'Role', type: 'select', options: [
{ value: 'admin', label: 'Admin' },
{ value: 'user', label: 'User' },
]},
],
validation: z.object({
name: z.string().min(1),
email: z.string().email(),
role: z.enum(['admin', 'user']),
}),
})
.table({
columns: [
{ key: 'id', label: 'ID', sortable: true },
{ key: 'name', label: 'Name', sortable: true, searchable: true },
{ key: 'email', label: 'Email', sortable: true },
{ key: 'role', label: 'Role', sortable: true },
],
})
.build()
// 4. Use in components
function UsersList() {
const { data, isLoading } = useResourceList(userResource, {
pagination: { page: 1, perPage: 10 },
})
if (isLoading) return <div>Loading...</div>
return (
<table>
<thead>
<tr>
{userResource.table?.columns.map(col => (
<th key={String(col.key)}>{col.label}</th>
))}
</tr>
</thead>
<tbody>
{data?.data.map(user => (
<tr key={user.id}>
<td>{user.id}</td>
<td>{user.name}</td>
<td>{user.email}</td>
<td>{user.role}</td>
</tr>
))}
</tbody>
</table>
)
}- Getting Started Guide - Learn the basics
- Core Package Docs - Complete API reference
- Examples - Sample applications (coming soon)
Filact follows a layered architecture:
βββββββββββββββββββββββββββββββββββββββ
β Your Application β
β (React Components, Pages) β
βββββββββββββββββββββββββββββββββββββββ
βΌ
βββββββββββββββββββββββββββββββββββββββ
β Filact Resources β
β (Forms, Tables, Actions, Hooks) β
βββββββββββββββββββββββββββββββββββββββ
βΌ
βββββββββββββββββββββββββββββββββββββββ
β Data Provider Layer β
β (REST, GraphQL, Custom) β
βββββββββββββββββββββββββββββββββββββββ
βΌ
βββββββββββββββββββββββββββββββββββββββ
β Your Backend API β
β (REST API, GraphQL, etc.) β
βββββββββββββββββββββββββββββββββββββββ
- Resources - Central configuration for CRUD operations on a model
- Data Providers - Abstract backend communication (REST, GraphQL, custom)
- Forms - Declarative form schemas with validation
- Tables - Sortable, filterable, paginated data tables
- Actions - Reusable operations at page, row, or bulk level
- Hooks - React hooks for data fetching and mutations
- Policies - Authorization rules for resources
Filact is perfect for:
- π Admin Panels - Manage application data
- π’ Back-office Applications - Internal business tools
- π Dashboards - Data visualization and analytics
- π οΈ CMS Systems - Content management interfaces
- π§ API Clients - Visual interfaces for APIs
This is a pnpm monorepo using Turborepo.
- Node.js 18+
- pnpm 8+
# Install dependencies
pnpm install
# Build all packages
pnpm build
# Run tests
pnpm test
# Run tests in watch mode
pnpm test:watch
# Run E2E tests
pnpm test:e2e
# Run linter
pnpm lint
# Type check
pnpm typecheck# Work on core package
cd packages/core
# Watch mode for development
pnpm dev
# Run tests with coverage
pnpm test:coverage
# Run tests with UI
pnpm test:uiFilact has comprehensive test coverage:
- Unit Tests - Component and hook testing with Vitest
- Integration Tests - Full data flow testing with MSW
- E2E Tests - Complete user journeys with Playwright
- Accessibility Tests - WCAG compliance with axe-core
Total: 123+ tests ensuring reliability and quality.
Contributions are welcome! Please read our Contributing Guide for details on:
- Code of Conduct
- Development process
- How to submit pull requests
- Coding standards
See CHANGELOG.md for a list of changes.
- β Core data management system
- β REST and GraphQL data providers
- β Resource builder with fluent API
- β Form builder with validation
- β Table builder with sorting/filtering
- β Actions system (page, row, bulk)
- β React hooks for CRUD operations
- β Lifecycle hooks
- β Authorization policies
- β Comprehensive test suite
- π UI component library (@filact/ui)
- π CLI tools for scaffolding
- π Documentation website
- π Example applications
- π Advanced features:
- Real-time updates
- File uploads
- Export/Import
- Internationalization (i18n)
- Multi-tenancy
- Charts and widgets
MIT Β© Filact
See LICENSE for details.
- π Documentation (coming soon)
- π¬ Discord Community (coming soon)
- π Issue Tracker
- π§ Email Support
Filact is inspired by:
- FilamentPHP - The Laravel admin panel that inspired this project
- React Admin - Pioneer in React admin frameworks
- shadcn/ui - Beautiful, accessible component system
Built with amazing open source libraries:
- React - UI library
- TypeScript - Type safety
- TanStack Query - Data fetching and caching
- React Hook Form - Form management
- Zod - Schema validation
- Vitest - Unit testing
- Playwright - E2E testing
If you find Filact useful, please consider giving it a star! β
Made with β€οΈ by the Filact team