caligrafy / caligrafy-quill
Describe it. Approve it. Ship it. Your idea turned into a complete app: a PHP MVC framework, made for Claude Code, that serves one capability to web pages, Vue apps, REST APIs and AI agents (MCP)
Package info
github.com/caligrafy/caligrafy-quill
Type:framework
pkg:composer/caligrafy/caligrafy-quill
Fund package maintenance!
Requires
- php: ^8.3
- claviska/simpleimage: ^4.4
- phpmailer/phpmailer: ^7.2
- phug/phug: ^2.0
- vlucas/phpdotenv: ^5.8
- wixel/gump: ^2.3
Requires (Dev)
- phpunit/phpunit: ^12
Suggests
- anthropic-ai/sdk: ^1.8 (with guzzlehttp/guzzle ^7.9): the Snap assistant with Claude (ANTHROPIC_API_KEY): php caligrafer.php add snap
- lbuchs/webauthn: ^2.2: passkeys (Caligrafy\Passkey, Route::auth 'passkeys' => true): php caligrafer.php add passkeys
- lucianotonet/groq-php: ^1.4: Caligrafy\Agent with Groq, the default provider: php caligrafer.php add ai
- minishlink/web-push: ^11.0 (with guzzlehttp/guzzle ^7.9): web push notifications (Caligrafy\Notify): php caligrafer.php add push
- stripe/stripe-php: ^23.0: Stripe payments (Caligrafy\Payment, Route::webhook 'verify' => 'stripe'): php caligrafer.php add payments
Provides
None
Conflicts
None
Replaces
None
- dev-master
- v2.26.1
- v2.26.0
- v2.25.0
- v2.24.1
- v2.24.0
- v2.23.0
- v2.22.1
- v2.22.0
- v2.21.9
- v2.21.8
- v2.21.7
- v2.21.6
- v2.21.5
- v2.21.4
- v2.21.3
- v2.21.2
- v2.21.1
- v2.21.0
- v2.20.0
- v2.19.8
- v2.19.7
- v2.19.6
- v2.19.5
- v2.19.4
- v2.19.3
- v2.19.2
- v2.19.1
- v2.19.0
- v2.18.2
- v2.18.1
- v2.18.0
- v2.17.0
- v2.16.5
- v2.16.4
- v2.16.3
- v2.16.2
- v2.16.1
- v2.16.0
- v2.15.0
- v2.14.1
- v2.14.0
- v2.13.6
- v2.13.5
- v2.13.4
- v2.13.3
- v2.13.2
- v2.13.1
- v2.13.0
- v2.12.4
- v2.12.3
- v2.12.2
- v2.12.1
- v2.12.0
- v2.11.0
- v2.10.2
- v2.10.1
- v2.10.0
- v2.9.2
- v2.9.1
- v2.9.0
- v2.8.0
- v2.7.1
- v2.7.0
- v2.6.0
- v2.5.0
- v2.4.0
- v2.3.0
- v2.2.0
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.0
- dev-rv_add_docker
This package is auto-updated.
Last update: 2026-11-15 21:50:07 UTC
README
Your idea turned into a complete app. Describe it to Claude Code, approve the plan, and Caligrafy ships it online, with the code in your own GitHub repository. Or write it yourself: everything Claude writes is plain Caligrafy, documented step by step.
Why developers choose it. A feature is written once, as a capability, and served to pages, Vue apps, REST, AI agents over MCP and Snap Cards, with the same rules and audit log everywhere. The same app takes 471 lines in Caligrafy against 708 in Laravel and 1,076 in Symfony, 7 of 8 security defaults need no code, and a new project installs 16.6 MB. See why Caligrafy: the benefits, the measurements, and what it is not yet.
With Claude
git clone https://github.com/caligrafy/caligrafy-quill.git myapp
cd myapp
claude
/caligrafy-quill:idea A reading list: I add books I want to read, mark them as read, and rate them from 1 to 5.
| You | Claude and Caligrafy | |
|---|---|---|
| 1. Describe it | your idea, in a sentence | a plan: the tables, every feature, who may do what, the pages |
| 2. Approve it | read the plan, change it, say OK | build every feature once and check it |
| 3. Ship it | approve the sign-ins in your browser | your GitHub repository, online at https://<name>.caligrafy.com |
Claude never asks for a password or a key, and asks before spending credits. Quickstart with Claude has the details.
Start from a proven prompt on the marketplace, and sell yours there once it is
online (/caligrafy-quill:marketplace, 25% of every sale).
By hand
You need Git and Docker Desktop (running):
git clone https://github.com/caligrafy/caligrafy-quill.git myapp
cd myapp
.bin/caligrafer quickstart --docker --example
Open http://localhost:8080/tasks. The Quickstart then
takes you through the same app over REST and from an AI agent, and puts it online with php caligrafer.php cloud deploy.
A feature, by hand, is four small pieces:
| Piece | File | Example |
|---|---|---|
| A table | application/models/Bookshelf/create_db.sql |
CREATE TABLE IF NOT EXISTS books (...), run with php caligrafer.php sql application/models/Bookshelf/create_db.sql (a later change: php caligrafer.php migrate make <name>) |
| A model | application/models/Bookshelf/Book.php |
class Book extends Model { public $id; public $title; ... }, one property per column |
| A capability | application/services/ |
#[Capability(name: 'list_books', readOnly: true)] with Book::with('author')->paginate(20) |
| Its routes | application/config/routing/web.php |
Route::page('/books', 'Books/index', ['data' => ['books' => 'list_books']]) |
The same capability is then a REST endpoint (Route::capabilities()), a tool for AI agents (Route::mcp()) and a
function of the generated JavaScript client. Forms, sign-in, webhooks and downloads (CSV, JSON or many files as one ZIP) are one route each
(Route::form, Route::auth, Route::webhook, Route::download), and Route::action answers whatever a page or a form
cannot say. Every request is declared: an application needs no controller.
Your first capability builds one, page
included.
A complete app
Every feature is written once, as a capability (its inputs, rules and permissions), and served everywhere:
web pages, Vue apps on desktop, tablet and phone, a REST API, AI agents such as Claude or Cursor
over MCP, and Snap Cards with an assistant: Route::snap(); turns every capability into a card a person can use,
shown with card views in your app's own look (Claude writes them from your pages), and gives them a Home that shows what needs them and an assistant that answers with those cards
(Snap Cards and the assistant).
Same rules, same permissions, same audit log, whichever way it is called. A capability can also run on a
timer (scheduled jobs), reach your users with the
app closed (notifications: web push and email), or
run later, outside the request (background jobs,
with retries).
| Data | models, queries (filters, paging, related rows, every value bound), migrations, the cache |
| Pages | Pug views and page components, declarative routes, design styles, install to home screen |
| Assistant | Snap Cards: every capability as a card (Ask, Show, Go, Track, Offer) in your app's own look (card views written from your pages), a Home that orchestrates what needs you, an assistant (Claude) that keeps the conversation's context; changes only from a Confirm |
| People | sign-in with a username or an email, passkeys, permissions and tokens |
| In the box | payments, AI (OpenAI, open models, Watson), face detection, machine learning, social cards, a production Dockerfile |
| Production | a production image that sizes itself to its container, keeps database connections, preloads the framework and keeps public answers in memory; an experimental async server for the API and AI agents; a 15 MB install, with each optional SDK added by php caligrafer.php add <feature> |
| Security by default | CSRF, bound queries, inputs, passwords, sessions, token scopes and N+1 prevention with no code |
| Quality | tests that call capabilities the way every channel does, php caligrafer.php doctor |
See How Caligrafy works.
Fast and small. On the same benchmark machine (2 CPUs), Caligrafy 2.26 answers 7,998 HTML pages a second, against 4,182 for Nuxt, 1,135 for Next.js, 1,830 for Symfony and 266 for Laravel; it is faster than Next.js on every test, and its experimental async server answers capability calls at 113,700 a second. A new project installs 13 packages and 16.6 MB, and a container uses about 35 MB (release notes).
Learn
| If you want to | Read |
|---|---|
| Know why to choose it | Why Caligrafy: benefits, measurements, and what it is not yet |
| See everything Caligrafy does | The documentation |
| Learn step by step, with Claude or by hand | The Caligrafy course |
| Build a feature | Your first capability |
| Every command | Caligrafer |
| Put it online | Putting it online: Caligrafy Cloud or your own server |
| Give the docs to a coding agent (Cursor, Codex, Copilot, Gemini) | AGENTS.md, llms.txt and llms-full.txt: every wiki page in one file |
| See what changed | Changelog |
| Contribute | Contributing and how the framework is built |
Community and support
- GitHub: issues for bugs and feature requests.
- Slack: join the Caligrafy community to get help and share what you build.
- Facebook: the Caligrafy group.
- Videos: the Caligrafy channel.
If Caligrafy helps you, sponsor it on GitHub or share caligrafy.com.
Caligrafy is released under the MIT License.
