Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Strawberry-Django best practices — DjangoOptimizerExtension, DataLoader, type-hint-first schemas, CRUD mutations, filters/pagination/Relay, permission extensions, security hardening, async/subscriptions, and testing. Load when working with strawberry-graphql-django.
.claude/skills/mamamou-strawberry-django/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 6% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 15% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 31% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 13% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 3% | 0% |
Strawberry-Django takes a very different shape from Graphene: it is type-hint-first, uses schema extensions (not middleware), ships a built-in query optimizer, generates CRUD mutations/filters/pagination from Django models, and is async-native. The references below focus on what is specific to Strawberry, not general GraphQL.
| Topic | Reference | Use for | | --------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | | DjangoOptimizerExtension | references/optimizer.md | Automatic only/select_related/prefetch_related/annotate from AST, hint fields, custom resolver optimization, edge cases | | N+1 and DataLoaders | references/n-plus-one.md | When the optimizer cannot help, async DataLoader in get_context, priming, combining with the optimizer |
| Topic | Reference | Use for | | ----------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | | Types and Fields | references/types-and-fields.md | @strawberry_django.type, auto, computed fields, get_queryset, model_property, enum generation, field descriptions from help_text | | Mutations | references/mutations.md | mutations.create/update/delete, NodeInput, partial inputs, handle_django_errors, custom mutations, transaction atomicity, batch operations | | Filters, Pagination, Relay | references/filters-pagination-relay.md | @strawberry_django.filter, custom filter_field, @strawberry_django.order, offset vs DjangoListConnection vs DjangoCursorConnection, relay.Node and GlobalID |
| Topic | Reference | Use for | | ---------------------- | --------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | | Permissions & Security | references/permissions-and-security.md | IsAuthenticated/IsStaff/HasPerm/HasRetvalPerm/HasSourcePerm, django-guardian object-level perms, DisableIntrospection, QueryDepthLimiter, MaxTokensLimiter, MaxAliasesLimiter, error masking |
| Topic | Reference | Use for | | ------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | | Async and Subscriptions | references/async-and-subscriptions.md | AsyncGraphQLView, sync_to_async ORM access, Channels + AuthGraphQLProtocolTypeRouter, broadcasting subscriptions, pitfalls mixing sync and async resolvers |
| Topic | Reference | Use for | | ------- | ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------- | | Testing | references/testing.md | strawberry_django.test.client.TestClient, client.login(), assertNumQueries for optimizer regressions, async tests, snapshot schema diffs |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 14,653 | 10,113 | -31% | 1 | 1 | 0% | 2,677 | 2,846 | +6% | 0 | 0 | — |
case-02 | fail→pass | 16,701 | 15,004 | -10% | 1 | 1 | 0% | 3,281 | 3,786 | +15% | 0 | 0 | — |
case-03 | pass→pass | 17,619 | 12,861 | -27% | 1 | 1 | 0% | 3,112 | 3,505 | +13% | 0 | 0 | — |
case-04 | pass→pass | 8,994 | 4,980 | -45% | 1 | 1 | 0% | 1,659 | 1,615 | -3% | 0 | 0 | — |
case-05 | pass→pass | 14,498 | 11,391 | -21% | 1 | 1 | 0% | 2,754 | 2,902 | +5% | 0 | 0 | — |
case-06 | pass→pass | 22,278 | 13,905 | -38% | 1 | 1 | 0% | 2,306 | 3,109 | +35% | 0 | 0 | — |
case-07 | pass→pass | 9,913 | 6,453 | -35% | 1 | 1 | 0% | 1,710 | 1,777 | +4% | 0 | 0 | — |
case-08 | pass→pass | 14,876 | 8,561 | -42% | 1 | 1 | 0% | 2,582 | 2,363 | -8% | 0 | 0 | — |
case-09 | fail→pass | 7,751 | 6,465 | -17% | 1 | 1 | 0% | 1,519 | 1,988 | +31% | 0 | 0 | — |
case-10 | fail→pass | 11,464 | 8,302 | -28% | 1 | 1 | 0% | 2,217 | 2,501 | +13% | 0 | 0 | — |
case-11 | fail→pass | 14,578 | 10,782 | -26% | 1 | 1 | 0% | 2,699 | 2,773 | +3% | 0 | 0 | — |
case-12 | pass→pass | 11,718 | 9,315 | -21% | 1 | 1 | 0% | 2,177 | 2,578 | +18% | 0 | 0 | — |
case-13 | pass→pass | 13,412 | 7,392 | -45% | 1 | 1 | 0% | 2,694 | 2,128 | -21% | 0 | 0 | — |
case-14 | fail→fail | 12,313 | 8,120 | -34% | 1 | 1 | 0% | 2,345 | 2,189 | -7% | 0 | 0 | — |
case-15 | fail→pass | 10,842 | 11,493 | +6% | 1 | 1 | 0% | 2,435 | 2,983 | +23% | 0 | 0 | — |
case-16 | fail→pass | 13,433 | 8,446 | -37% | 1 | 1 | 0% | 2,457 | 2,280 | -7% | 0 | 0 | — |
case-17 | fail→fail | 12,003 | 3,993 | -67% | 1 | 1 | 0% | 2,108 | 1,471 | -30% | 0 | 0 | — |
case-18 | fail→pass | 17,691 | 8,309 | -53% | 1 | 1 | 0% | 2,485 | 1,754 | -29% | 0 | 0 | — |
case-19 | fail→fail | 23,967 | 15,545 | -35% | 1 | 1 | 0% | 2,753 | 3,508 | +27% | 0 | 0 | — |
case-20 | pass→pass | 33,747 | 16,017 | -53% | 1 | 1 | 0% | 3,355 | 3,351 | -0% | 0 | 0 | — |
case-21 | pass→pass | 19,841 | 11,331 | -43% | 1 | 1 | 0% | 3,782 | 2,989 | -21% | 0 | 0 | — |
case-22 | fail→pass | 12,778 | 11,081 | -13% | 1 | 1 | 0% | 2,337 | 2,035 | -13% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +41 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.