# Magic

**The Laravel experience for Flutter.**

Facades, Eloquent-style models, service providers and an IoC container for Flutter apps. If you know Laravel, you already know Magic.

## Architecture. Included. Ship.

Flutter gives you widgets, not architecture. Magic wires the HTTP client, auth, cache, validation and routing so you stop rebuilding them for every app.

### Routing

GoRouter underneath, with middleware, named routes and navigation that needs no `BuildContext`.

[Learn more about Routing](https://anilcancakir.com/magic/docs/basics/routing.md)

### Eloquent ORM

Active-record models over your REST API, with casts, mutators and repositories. Add `magic_local_storage` for a local leg.

[Learn more about Eloquent ORM](https://anilcancakir.com/magic/docs/eloquent/getting-started.md)

### Facades and IoC

18 facades such as `Auth`, `Http` and `Cache`, resolved from a service container.

[Learn more about Facades and IoC](https://anilcancakir.com/magic/docs/architecture/facades.md)

### Authentication

Token guards, cache-first session restore and auto-refresh, plus gates and policies.

[Learn more about Authentication](https://anilcancakir.com/magic/docs/security/authentication.md)

### Validation

Rules declared in the view, API 422 errors shown on the fields and async rules for remote checks.

[Learn more about Validation](https://anilcancakir.com/magic/docs/digging-deeper/validation.md)

### First-class fakes

`Http.fake()`, `Auth.fake()` and `Cache.fake()` replace mocks. No mockito needed.

[Learn more about First-class fakes](https://anilcancakir.com/magic/docs/testing/getting-started.md)

## Your agent speaks Magic.

The Magic skill teaches your coding assistant the facades, the Eloquent conventions and the service provider lifecycle before the first line. One command wires it up.

```bash
npx skills add anilcancakir/ai --skill magic-framework
```

[other editors](https://github.com/anilcancakir/ai)

## And works inside the project.

Skills teach the conventions. The local MCP server gives your agent the project's own commands while it edits, over stdio.

```bash
claude mcp add magic -- dart run magic:dowel mcp:serve
```

## Start building in seconds

```bash
flutter pub add magic
```

Or add to `pubspec.yaml`:

```yaml
dependencies:
  magic: ^1.0.1
```

Or give your AI agent this prompt:

```text
Read https://anilcancakir.com/magic/docs/llms.txt and install the Magic package in this project.
```

## Docs

### Getting Started

- [Installation](https://anilcancakir.com/magic/docs/getting-started/installation.md)
- [Configuration](https://anilcancakir.com/magic/docs/getting-started/configuration.md)
- [Directory Structure](https://anilcancakir.com/magic/docs/getting-started/directory-structure.md)
- [Service Providers](https://anilcancakir.com/magic/docs/getting-started/service-providers.md)

### Architecture

- [Application Structure](https://anilcancakir.com/magic/docs/architecture/application-structure.md)
- [Request Lifecycle](https://anilcancakir.com/magic/docs/architecture/request-lifecycle.md)
- [Service Container](https://anilcancakir.com/magic/docs/architecture/service-container.md)
- [Facades](https://anilcancakir.com/magic/docs/architecture/facades.md)

### The Basics

- [Routing](https://anilcancakir.com/magic/docs/basics/routing.md)
- [Middleware](https://anilcancakir.com/magic/docs/basics/middleware.md)
- [Controllers](https://anilcancakir.com/magic/docs/basics/controllers.md)
- [Views](https://anilcancakir.com/magic/docs/basics/views.md)
- [Forms](https://anilcancakir.com/magic/docs/basics/forms.md)
- [Actions](https://anilcancakir.com/magic/docs/basics/actions.md)
- [HTTP Client](https://anilcancakir.com/magic/docs/basics/http-client.md)
- [UI Helpers](https://anilcancakir.com/magic/docs/basics/ui-helpers.md)

### Eloquent ORM

- [Eloquent: Getting Started](https://anilcancakir.com/magic/docs/eloquent/getting-started.md)
- [Eloquent: Mutators](https://anilcancakir.com/magic/docs/eloquent/mutators.md)
- [Repositories](https://anilcancakir.com/magic/docs/eloquent/repositories.md)
- [Eloquent: Serialization](https://anilcancakir.com/magic/docs/eloquent/serialization.md)

### Security

- [Authentication](https://anilcancakir.com/magic/docs/security/authentication.md)
- [Authorization](https://anilcancakir.com/magic/docs/security/authorization.md)
- [Security: Vault](https://anilcancakir.com/magic/docs/security/vault.md)

### Digging Deeper

- [Helpers](https://anilcancakir.com/magic/docs/digging-deeper/helpers.md)
- [Validation](https://anilcancakir.com/magic/docs/digging-deeper/validation.md)
- [Localization](https://anilcancakir.com/magic/docs/digging-deeper/localization.md)
- [Logging](https://anilcancakir.com/magic/docs/digging-deeper/logging.md)
- [Cache](https://anilcancakir.com/magic/docs/digging-deeper/cache.md)
- [Session & Flash Data](https://anilcancakir.com/magic/docs/digging-deeper/session.md)
- [Session Scope](https://anilcancakir.com/magic/docs/digging-deeper/session-scope.md)
- [Events](https://anilcancakir.com/magic/docs/digging-deeper/events.md)
- [File Storage](https://anilcancakir.com/magic/docs/digging-deeper/file-storage.md)
- [Carbon (Date/Time)](https://anilcancakir.com/magic/docs/digging-deeper/carbon.md)
- [Launch](https://anilcancakir.com/magic/docs/digging-deeper/launch.md)
- [Perf Hooks](https://anilcancakir.com/magic/docs/digging-deeper/perf-hooks.md)

### Testing

- [Testing: Getting Started](https://anilcancakir.com/magic/docs/testing/getting-started.md)
- [HTTP Tests](https://anilcancakir.com/magic/docs/testing/http-tests.md)
- [Facade Testing](https://anilcancakir.com/magic/docs/testing/facades.md)

### Packages

- [Magic CLI](https://anilcancakir.com/magic/docs/packages/magic-cli.md)
- [Magic DevTools](https://anilcancakir.com/magic/docs/packages/magic-devtools.md)

### Contributing

- [Contribution Guide](https://anilcancakir.com/magic/docs/contributing/contribution-guide.md)
- [Documentation Authoring Guide](https://anilcancakir.com/magic/docs/contributing/documentation.md)
