Populars: Dades actualitzades el 26 d’octubre del 2026

Categories

Internet1.355
Comunicació321
Àudio i vídeo898
Gràfics i disseny539
Ofimàtica i productivitat1.120
Eines per a desenvolupadors3.132
Eines d’IA527
Seguretat i privadesa385
Eines del sistema3.113
Jocs523
Educació i ciència239
Xarxa i TI284

Mago: baixar versions anteriors

Mago is a toolchain for PHP that aims to provide a set of tools to help developers write better code.

Carthage Software Utilitats per a desenvolupadors #86 Utilitats per a desenvolupadors

Aquí hi ha 18 versions de Mago, des de 6 de maig del 2026 fins a l’actual, 1.59.0. Cadascuna enllaça amb els instal·ladors del mateix desenvolupador.

2026: 18 18 26
VersióDataMidaFitxers
1.59.0Darrera versió 25 d’octubre del 2026 — 64 bits ZIP
Notes de la versió
Mago 1.59.0 fixes analyzer narrowing across boolean guards, nullsafe checks, and `elseif` branches, improves generic and callable inference, and updates the analyzer extension protocol to MANA 2.2.

> [!NOTE]
>
> ### Support Mago
>
> Does your company use Mago? Please consider sponsoring its development so we can keep fixing bugs and shipping releases.
>
> [Sponsor Mago](https://github.com/sponsors/azjezz) ❤️

## 🐛 Bug Fixes

### Analyzer

• **Namespace constants**:preserves global constant fallback in namespaced declarations. (#2594, 0e6c1d8)
• **Method assertions**:keeps getter assertions from the right side of `||`. (#2600, #2609, 777429f)
• **CLI argument guards**:fixes `$argc` typing and negated `count()` bounds. (#2607, #2608, be88d13)
• **Template defaults**:applies declared defaults when constructing generic objects. (#2603, #2606, 2066b18)
• **Stored booleans**:keeps narrowing implied by boolean variables across `&&` and `||`. (#2601, 8d739b3)
• **Nullsafe membership**:narrows receivers after strict `in_array()` checks against non-null values. (#2599, 56e4b49)
• **Collection intersections**:honors narrower read types in intersected collection types. (#2612, 79c295f)
• **Callable signatures**:preserves parameter and return types through `Closure::fromCallable()`. (#2611, #2614, 3ea5963)
• **PHPDoc generics**:checks missing, excess, and out-of-bounds template arguments in docblocks. (#2616, 2ac5c5d)
• **Boolean branches**:preserves `true` and `false` types across short-circuit expressions. (#2593, 9890d23)
• **Dynamic instanceof**:keeps valid operand types when a dynamic class check fails. (#2592, #2595, 65530ba)
• **Strict equality**:narrows both union-typed operands to their shared types. (#2559, 923c061)
• **Elseif branches**:preserves all reachable types and branch facts after conditional chains. (#2619, 0a098f4)
• **Nullsafe comparisons**:avoids false impossible-null reports when assigning comparison results. (#2591, b7273f4)
• **URL components**:allows empty user, password, query, and fragment strings from `parse_url()`. (#2590, #2610, 16dd70b)

## 📖 Documentation

### Extensions

• **Protocol compatibility**:documents MANA 2.2 constant fallback and worker upgrade requirements. (#2594, 0e6c1d8)

## 🏗️ Internal

### CI

• **Pull request limit**:limits outside contributors to one open PR at a time, including drafts. (9b6979c)

### Tooling

• **Justfile cleanup**:removes an unused variable. (3f212f3)

## 🧩 Extension Protocol

### Analyzer

• **MANA 2.2**:adds namespace fallbacks to global constant references in the protocol and PHP SDK. (#2594, 0e6c1d8)

Update the PHP SDK to 1.59.0 when upgrading Mago. Custom analyzer workers must use MANA 2.2; MANA 2.1 workers are not compatible. The linter protocol is unchanged.

## 🙏 Thank You

### Contributors

Thank you to everyone who contributed to this release:

• @alfredbez:#2559
• @hbenabdallah:#2595
• @pujitha24:#2610
• @shuvroroy:#2606, #2608, #2609, #2614
• @serdarucel for investigating #2591 in #2598.

### Issue Reporters

Thank you to everyone who reported issues that shaped this release:

• @alfredbez:#2619
• @cweiske:#2611
• @douglasgreen:#2607
• @gsteel:#2593
• @MichaelOwenDyer:#2591, #2592, #2599, #2600, #2601
• @NoNoNo:#2594
• @norberttech:#2616
• @npo-mmenke:#2603, #2612
• @patka-123:#2590

**Full Changelog**:https://github.com/carthage-software/mago/compare/1.58.2...1.59.0
1.58.2 19 d’octubre del 2026 — 64 bits ZIP
Notes de la versió
Mago 1.58.2 fixes parser recovery for unfinished static accesses, keeping class names and call arguments in the syntax tree while you type.

> [!NOTE]
>
> ### Support Mago
>
> Does your company use Mago? Please consider sponsoring its development so we can keep fixing bugs and shipping releases.
>
> [Sponsor Mago](https://github.com/sponsors/azjezz) ❤️

## 🐛 Bug Fixes

### Parser

• **Incomplete static access**:keeps `Foo::` and `Foo::$` in the syntax tree during editor recovery. (#2589, 431e823)

## 🙏 Thank You

### Contributors

• @azjezz for the parser fix. (431e823)

### Issue Reporters

• @AJenbo for reporting #2589.

**Full Changelog**:[1.58.1...1.58.2](https://github.com/carthage-software/mago/compare/1.58.1...1.58.2)
1.57.0 14 d’octubre del 2026 — 64 bits ZIP
Notes de la versió
Mago 1.57.0 adds opt-in BcMath/GMP arithmetic, applies PHPDoc flags from type patches, fixes analyzer and formatter bugs, and speeds up work across the toolchain.

> [!NOTE]
>
> ### Support Mago
>
> Does your company use Mago? Please consider sponsoring its development so we can keep fixing bugs and shipping releases.
>
> [Sponsor Mago](https://github.com/sponsors/azjezz) ❤️

## ✨ Features

### Analyzer

• **Number operators**:adds opt-in arithmetic for `BcMath\Number` and `GMP` via `allow-operator-overloading`. (#2486, #2487, 0fff359)

## 🐛 Bug Fixes

### Analyzer

• **Native type contracts**:keeps native types and nullability when PHPDoc conflicts. (#2494, 2dc705f)
• **Inline @var tags**:no longer treats unassigned local variables as defined. (#2496, 56f2ad9)
• **Malformed PHPDoc**:reports malformed types and unresolved variable links. (#2493, c1cdff1)
• **Conditional variables**:reports possibly undefined variables after switch and in finally. (#2497, e378e5d)
• **Iterator types**:keeps current() and key() types without explicit generics. (#2476, 467b29d)
• **Array unions**:preserves left-hand values and optional keys with array-key key types. (#2485, #2488, 782b0b5)
• **Empty checks**:handles unset variables and falsy values correctly. (#2484, 8dc47c5)
• **Dynamic properties**:honors AllowDynamicProperties on classes and their ancestors. (#2483, 6bccb58)
• **Deprecated members**:reports access to deprecated properties and class constants. (#2478, 90fa5e5)
• **Deprecated scopes**:skips deprecation warnings inside already deprecated code. (#2492, d412c32)
• **Boolean assignments**:avoids false narrowing when loops update boolean flags. (#2499, 64ad7d6)
• **Iterable assertions**:narrows traversables without false impossible-condition reports. (#2508, ac54e6c)

### Codex

• **Patch flags**:applies supported PHPDoc flags and their negations from type patches. (#2477, #2495, 29f3416)

### Formatter

• **Stable layouts**:keeps concatenations, arrow functions, and assignments stable across passes. (#2491, 9f4804d)
• **Parenthesized comparisons**:keeps comparison layouts stable when operands use parentheses. (#2480, f2fdf5f)

### Prelude

• **Base64 decoding**:returns string for non-strict decoding. (#2511, 4918783)

## 📖 Documentation

### Configuration

• **Operator settings**:documents opt-in number operators in English, French, and Chinese. (#2487, 0fff359)
• **Patch flags**:documents supported PHPDoc patch flags in English, French, and Chinese. (#2495, 29f3416)

## 🏗️ Internal

### Analyzer

• **Named arguments**:speeds up argument matching and default type inference. (#2498, 2f7475f)
• **Member checks**:cuts reference scans and allocations when checking unused members. (cc19617)
• **Default arguments**:skips needless type expansion for omitted non-generic defaults. (#2506, #2507, 6590a7b)

### Codex

• **Reference lookups**:speeds up reference queries and merges. (23ebbf2)

### Formatter

• **Formatting work**:cuts allocations and layout work. (a2e8ae5)

### Guard

• **Dependency scans**:skips unused dependency files and cuts allocations. (dae8785)

## 🧩 Extension Protocol

No protocol changes in this release.

## 🙏 Thank You

### Contributors

Thank you to everyone who contributed to this release:

• @alfredbez:#2476, #2492, #2493, #2494, #2496, #2497, #2511
• @AnnaDamm:#2495, #2507
• @matthewnessworthy:#2480
• @Mir-Zairan:#2487
• @ynaamane:#2488

### Issue Reporters

Thank you to everyone who reported issues that shaped this release:

• @amateescu:#2478, #2508
• @AnnaDamm:#2477, #2498, #2506
• @atournayre:#2491
• @jfilter:#2483, #2484, #2485
• @MichaelOwenDyer:#2499
• @Mir-Zairan:#2486

**Full Changelog**:https://github.com/carthage-software/mago/compare/1.56.3...1.57.0
1.56.3 12 d’octubre del 2026 — 64 bits ZIP
Notes de la versió
Mago 1.56.3 fixes formatter stability with preserved line breaks and keeps return types from valid method targets in unions.

> [!NOTE]
>
> ### Support Mago
>
> Does your company use Mago? Please consider sponsoring its development so we can keep fixing bugs and shipping releases.
>
> [Sponsor Mago](https://github.com/sponsors/azjezz) ❤️

## 🐛 Bug Fixes

### Analyzer

• **Union method calls**:keeps known return types when a union member lacks the method. (#2474, 001ff0f)

### Formatter

• **Preserved line breaks**:keeps conditions and member chains stable across formatting passes. (#2475, 6d73836)

## 🧩 Extension Protocol

No protocol changes in this release.

## 🙏 Thank You

### Contributors

Thank you to everyone who contributed to this release:

• @alfredbez:#2474

### Issue Reporters

Thank you to everyone who reported issues that shaped this release:

• @atournayre:#2475

**Full Changelog**:https://github.com/carthage-software/mago/compare/1.56.2...1.56.3
1.54.0 8 d’octubre del 2026 — 64 bits ZIP
Notes de la versió
Mago 1.54.0 continues the performance work across analysis, PHPDoc parsing, metadata, name handling, and project loading. It also adds configurable slow-file warnings and fixes integer-comparison narrowing.

> [!NOTE]
>
> ### Support Mago
>
> Does your company use Mago? Please consider sponsoring its development so we can keep fixing bugs and shipping releases.
>
> [Sponsor Mago](https://github.com/sponsors/azjezz) ❤️

## ✨ Features

### Analyzer

• **Slow-file warnings**:sets the warning threshold through config or CLI, keeping 5s as the default. (#2436, #2438, 3c38ca1)

## 🐛 Bug Fixes

### Analyzer

• **Integer comparisons**:narrows `null` and `false` correctly in integer comparisons. (#2434, #2437, a75379c)

## 🏗️ Internal

### Analyzer

• **Call analysis**:cuts allocations in expression, argument, and invocation analysis. (c553631, c33ecfb)
• **Condition checks**:skips needless paradox checks and assertion-map copies. (ae907c2, 14e2f65)
• **Visibility checks**:skips repeated public-method lookups. (9f42dfd)
• **Parameter checks**:skips unused-parameter work for functions with no parameters. (f00d6d7)

### Codex

• **Class metadata**:cuts copying and reuses lowercase lookups and prepared property types. (62aec23, d413832)
• **Type setup**:avoids needless type clones during population. (569e3c9)

### Pipeline

• **Project loading**:speeds up file reads, parsing, and compilation. (fa28802)

### Syntax

• **Namespace checks**:uses a focused walker to gather namespaces. (c085159)
• **Throw checks**:stops block scans once it finds a throw. (781c18c)

### PHPDoc

• **Docblock parsing**:skips trivia storage during analysis and metadata scans. (f30ced2)

### Names

• **Word interning**:reduces lock contention and grows per-thread caches. (05304cd)

## 🧩 Extension Protocol

No protocol changes in this release.

## 🙏 Thank You

### Contributors

Thank you to everyone who contributed to this release:

• @annadamm-check24:#2438
• @ynaamane:#2437

### Issue Reporters

Thank you to everyone who reported issues that shaped this release:

• @annadamm-check24:#2436
• @mytskine:#2434

**Full Changelog**:https://github.com/carthage-software/mago/compare/1.53.0...1.54.0
1.50.0 21 de setembre del 2026 — 64 bits ZIP
Notes de la versió
Mago 1.50.0 adds `mago fix` to apply fixes across all four tools until no changes remain, alongside safer imports, better type analysis, and more flexible pragmas and guard patterns.

## ✨ Features

### CLI

• **`mago fix`**:runs guard, analyzer, linter, and formatter until fixes settle, with safety controls. (#2157, 7386092)

## 🐛 Bug Fixes

### Analyzer

• **Callable arrays**:preserves `is_callable()` narrowing for calls, closure conversion, offsets, and loops. (#2385, 18482c2)
• **Stringable names**:supports `Stringable` property names and variable-variable reads. (659446c)
• Shoutout to Ondřej Mirtes (@ondrejmirtes), PHPStan’s creator, for [sharing this in Roave’s Discord](https://discord.com/channels/1090672946370052166/1090672946856595500/1551529672234246154). I stole it for Mago! 😄

### Linter

• **Import conflicts**:avoids fixes that shadow class names and asks for a manual alias. (#2136, 5d4ceea)

### Guard

• **Brace patterns**:accepts brace alternatives in perimeter paths and symbol selectors. (#2372, #2373, e26e451)

### Collector

• **Pragma lists**:accepts whitespace and repeated category prefixes in comma-separated issue codes. (#2109, 05f6818)

### Prelude

• **`preg_replace`**:preserves array key types and marks the replacement count as non-negative. (#2384, d894be8)

### CLI

• **CST exit codes**:returns failure for parse errors while still printing the syntax tree. (116abff)

## 📖 Documentation

### Guides

• **Fixes and suppressions**:documents `mago fix` and pragma lists in English, French, and Chinese. (#2157, #2109, 7386092, 05f6818)

## 🏗️ Internal

### Maintenance

• **Nightly Clippy**:uses `mul_add` for Kan defect scores and handles watch-mode exit codes. (044b765, 116abff)

## 🧩 Extension Protocol

No protocol changes in this release.

## 🙏 Thank You

### Contributors

This release contains no merged external pull requests.

### Issue Reporters

Thank you to everyone who reported issues that shaped this release:

• @adam-ja:#2157
• @bendavies:#2385
• @HaiTo:#2372
• @gsteel:#2109
• @umulmrum:#2136
• @Double-Ramzi:#2384

**Full Changelog**:https://github.com/carthage-software/mago/compare/1.49.0...1.50.0
1.47.2 19 d’agost del 2026 — 64 bits ZIP
Notes de la versió
# Mago 1.47.2

Mago 1.47.2 prevents invalid UTF-8 reporting crashes, preserves formatter semantics, and fixes several analyzer false positives.

## 🐛 Bug Fixes

### Analyzer

**Static class-string calls**: preserves generics returned by `static` factories. (#2220, 0766957)
**Array assignments**: reports undefined target variables once. (#2219, 1705475)
**Promoted property hooks**: analyzes hook bodies and records method usage. (#2218, 0936c30)

### Formatter

**Invoked constructs**: preserves required parentheses around invoked `require` expressions. (#2221, 38f9e2a)

### Reporting

**Invalid UTF-8**: preserves source offsets and prevents rich-reporting panics. (#2222, e91cc71)

## 🏗️ Internal

### Maintenance

**Shared internals**: deduplicates closure typing, call analysis, and linter utilities. (1668678)
**Analyzer linting**: cleans up Clippy findings after the shared refactor. (782d2cc)

## 🙏 Thank You

### Contributors

No external pull requests were merged for this release.

### Issue Reporters

Thank you to everyone who reported issues that shaped this release:

@ddanielou: #2218
@SanderMuller: #2219
@BafS: #2220
@daliforenko: #2221
@MichaelOwenDyer: #2222

**Full Changelog**: https://github.com/carthage-software/mago/compare/1.47.1...1.47.2
1.46.0 5 d’agost del 2026 — 64 bits ZIP
Notes de la versió
Mago 1.42.0
A small release adding a prefer-early-return linter rule, fixing Windows self-update, and clearing analyzer and PHPDoc false positives around is_a(), nullable destructuring, and @param on promoted properties.
✨ Features
Linter
• prefer-early-return:new rule suggesting early returns to reduce nesting in functions. (#2031, e523ab1)
🐛 Bug Fixes
Analyzer
• is_a() with allow_string:a string subject no longer triggers a false impossible-type-comparison. (db64917)
• Nullable destructuring:destructuring T|null keeps element types (plus null) instead of widening to mixed. (643a037)
PHPDoc Syntax
• @param on promoted properties:@param T with no variable is allowed and types the property like @var. (8b9af32)
CLI
• Windows self-update:extracts the .exe-suffixed binary from the archive, fixing "file not found". (805a1c3)
🙏 Thank You
Contributors
A huge thank you to everyone who contributed code to this release:
• @Bleksak:#2031
Full Changelog:1.41.0...1.42.0
1.42.0 27 de juny del 2026 — 64 bits ZIP
Notes de la versió
Mago 1.42.0
A small release adding a prefer-early-return linter rule, fixing Windows self-update, and clearing analyzer and PHPDoc false positives around is_a(), nullable destructuring, and @param on promoted properties.
✨ Features
Linter
- prefer-early-return: new rule suggesting early returns to reduce nesting in functions. (#2031, e523ab1)
🐛 Bug Fixes
Analyzer
- is_a() with allow_string: a string subject no longer triggers a false impossible-type-comparison. (db64917)
- Nullable destructuring: destructuring T|null keeps element types (plus null) instead of widening to mixed. (643a037)
PHPDoc Syntax
- @param on promoted properties: @param T with no variable is allowed and types the property like @var. (8b9af32)
CLI
- Windows self-update: extracts the .exe-suffixed binary from the archive, fixing "file not found". (805a1c3)
🙏 Thank You
Contributors
A huge thank you to everyone who contributed code to this release:
- @Bleksak: #2031
Full Changelog: 1.41.0...1.42.0
1.40.2 25 de juny del 2026 — 64 bits ZIP
Notes de la versió
Mago 1.40.2
A patch release fixing analyzer false positives around property narrowing across calls and match subjects, two PHPDoc inline-code and conditional-type parsing fixes, plus new diagnostics for unsetting readonly/hooked properties and invalid trait as modifiers.
✨ Features
Analyzer
- Invalid unset: unsetting a readonly or hooked property is now reported. (#2018, a24eb10)
Semantics
- Trait as modifiers: a non-visibility modifier in a trait as adaptation (e.g. as final) is now rejected. (e3d9437)
🐛 Bug Fixes
Analyzer
- match after impure call: a property used as a match subject no longer widens to mixed. (#2014, c9e5cc9)
- Narrowing across calls: passing $obj->prop no longer drops narrowings on sibling properties. (#2015, 2e9a529)
- Readonly writes: outside writes to a readonly property report a readonly violation, not a visibility one. (5eb7068)
PHPDoc Syntax
- Inline code spans: // and quotes inside backticks are literal, not an "unclosed code" error. (95b393d)
- Parenthesized conditionals: ($x is Y ? A : B) return types parse correctly again. (3a8d627)
🙏 Thank You
Issue Reporters
Thank you to everyone who reported issues that shaped this release:
- @Lukkie: #2014
- @BafS: #2015
- @edsrzf: #2018
Full Changelog: 1.40.1...1.40.2
1.40.1 24 de juny del 2026 — 64 bits ZIP
Notes de la versió
Mago 1.40.1
A small patch release fixing array_key_exists() narrowing under strict-array-index-existence and a PHPDoc parsing regression where a @return description beginning with is was mistaken for a conditional type.
🐛 Bug Fixes
Analyzer
- array_key_exists(): narrows a non-literal key like isset() under strict-array-index-existence. (#2012, 246b1eb)
PHPDoc Syntax
- Conditional types: is only starts a conditional type when a target ? follows, so prose like @return bool is true when … stays a description. (8d615a8)
🙏 Thank You
Contributors
A huge thank you to everyone who contributed code to this release:
- @Soean: #2012
Issue Reporters
Thank you to everyone who reported issues that shaped this release:
- @ddanielou: #2008
Full Changelog: 1.40.0...1.40.1
1.40.0 24 de juny del 2026 — 64 bits ZIP
Notes de la versió
Mago 1.40.0
A big release driven by community reports: three new formatter settings, a new suspicious-explode-arguments linter rule and a final-controller auto-fix, an inspect-baseline CLI command, a Composer-shipped editor schema, and a long list of analyzer, codex, prelude, and PHP-parity syntax fixes. Under the hood, the 2.0 groundwork landed on main: a new high-level IR, a unified mago-phpdoc-syntax, and new mago-allocator/mago-flags crates.
✨ Features
Analyzer
- array_filter truthiness: a callback-less array_filter() narrows values to their truthy form. (#1990, bc9bede)
Formatter
- Breaking binary expressions: preserve_breaking_binary_expression keeps author line breaks in such chains. (#1853, 5aacc7d)
- Sort uses by length: optional sorting of use statements by length. (#1942, 0688859)
- Tag + declare: optionally combine the opening tag and declare(strict_types=1) onto one line. (#1959, 2ff4cf5)
Linter
- suspicious-explode-arguments: warns when explode's short literal looks swapped into the string position. (#1998, 577d40a)
- final-controller fix: offers an auto-fix that inserts final before any modifier. (#2006, 82017a0)
- sensitive-parameter: skips boolean-like parameters. (#1949, 2333626)
Type System
- empty types: empty and empty-scalar are supported in type-syntax and codex. (#1968, e94cfdd)
CLI
- inspect-baseline: new command to visualise the distribution of baselined issues. (#1900, efd07bd)
Composer
- Editor schema: ships a version-matched schema.json under vendor/carthage-software/mago/. (#1899, 38b78d0)
Nix
- Default package: packages.<system>.default now provides bin/mago. (#1970, 13d7071)
🐛 Bug Fixes
Analyzer
- Named args + optional params: too-few-arguments fires when a named arg fills only an optional param. (#2004, c5ec4ef)
- Conditional array shapes: double-quoted array-access keys reconcile like single-quoted ones. (#2005, 095badf)
- Shadowed overrides: no false incompatible-return-type against an ancestor hidden by an intermediate override. (#1996, 431ff97)
- $this calls: a property keeps its declared type instead of widening to mixed. (#1994, 5eef024)
- Readonly narrowing: readonly property narrowings survive a call passing an object argument. (#1993, 5cbbe91)
- foreach over unions: corrected always-entered inference, fixing a false impossible-condition. (#1986, 22951bd)
- Compound conditions: avoid duplicate diagnostics in compound conditions. (#1961, 1ea5ba2)
- @property traits: trait property conflicts are no longer reported against @property tags. (#1964, a5f3823)
Codex
- Self-cased display: self/static/parent resolve to the original-cased class name in diagnostics. (#1995, b544222)
- Closure instanceof: closures are treated as instances of Closure. (#1956, 6fe1bbd)
- Callable variance: null is no longer ignored in contravariant callable parameter checks. (#1966, 3f94734)
Linter
- String-concat chains: a whole chain collapses into one no-redundant-string-concat issue and fix. (#2003, f8a31f8)
- no-dead-store: flags stores overwritten across a conditional branch. (#1999, a315465)
- no-boolean-flag: only flags boolean parameters actually used as flags. (#1988, 50cdd11)
- prefer-early-continue: the auto-fix preserves comments and indentation. (#1946, 495f639)
Syntax
- Operator precedence: corrected clone/cast/unary precedence and bound print/yield above and/xor/or. (1ac37b0, 4d01d2d)
- String interpolation: distinguishes ${label}/${ expr } and $a[offset] forms in the lexer. (b56a704, f3198c8)
- Reference operands: relational stays above equality when a reference assignment is an operand. (ea6cbce)
- Unicode escapes: \u{...} decodes to UTF-8 bytes to match Zend. (b19386c)
HIR
- Integer literals: lowered with PHP long semantics, overflowing to float. (9014c33, 79a7600)
- Anonymous classes: anonymous-class modifiers are now lowered. (797358f)
Docblock
- static return: parses a static return type after the static method modifier. (#1963, d5fb015)
Prelude
- phpversion(): $extension is optional. (#1950, 5a
1.30.0 4 de juny del 2026 — 64 bits ZIP
Notes de la versió
Mago 1.30.0
A release focused on generics and robustness: intersection types of generic parameters are now computed, generic reflection (ReflectionClass<T>) threads T into method-return inference, and a new fuzzing + Miri CI hardened the lexer and parsers against crashes, leaks, and quadratic blowups on malformed input. Also: vendor type patches, an object&callable type, and the usual analyzer, codex, formatter, linter, and CLI fixes.
✨ Features
Analyzer
- Generic reflection: ReflectionClass<T>/ReflectionMethod<T> thread T into getName()/invoke() return types. (c44dc8f)
- object&callable type: invokable classes are accepted via has-method<__invoke>. (#1902, 7efac3c)
Codex
- Vendor type patches: a patches source overrides third-party types without editing vendor code. (#1873, dcfd38b)
Database
- Explicit extensionless files: files named without an extension are loaded when listed explicitly. (#1916, 639f481)
🐛 Bug Fixes
Analyzer
- Generic intersections: A&B of unions/iterables computed, e.g. (int|bool)&(int|float) → int. (#1945, 353ed77, 7dd3d61)
- do/while null-narrowing: the loop condition now narrows the body on re-entry. (#1947, db10237)
- Undocumented __call return: inferred from __call's declared return instead of mixed. (131537a)
Codex
- public-properties-of: resolves inherited props, @type aliases, and generic-parameter selectors. (#1928, #1929, ce5eea6)
- Transitive @mixin: methods resolve across mixin chains. (#1915, e6d9304)
- Nested templates: params inside class-string and $this in @extends/@implements now resolve. (#1924, f2fff71, 5eda2e0)
- Patched method signatures: abstract/concrete mismatches in method patches no longer flagged. (#1940, c370be3)
Formatter
- null last in unions: ordered last by default per PER CS 3. (#1835, 3e5d38c)
- Comment before method chain: kept on its own line. (#1854, 1db1fa5)
- Property-receiver chains: first method stays on the same line under same-line chain style. (#1193, 5ff2133)
Linter
- FQ refs in namespace-less files: fully-qualified global class/function/constant references are flagged. (#1846, 53626d0)
- global/static rebinds: no false no-parameter-shadowing/no-dead-store. (#1910, #1911, 4ccc4f5)
Syntax
- Class-name keyword casing: resource/integer no longer collide with type keywords. (#1898, 899cbf3)
- Identifier::last_segment: returns the last segment, not the first. (#1919, cadea52)
- Interpolation perf & leaks: brace-interpolation scan is linear and string-aware; token-kind leak fixed. (#1914, 478aa81, a80e557)
Type Syntax
- Malformed-input hardening: type parser is depth-guarded; invalid float tokens like .1E are no longer emitted. (5179f3f, 6baf0b1)
Twig Syntax
- Malformed-input hardening: expression/statement parsing is depth-guarded and an arena leak is fixed. (f338622, 3972674)
CLI
- Versioned docs URL: the generated mago.toml links to a versioned, non-404 docs page. (#1939, b120e6b)
- Baseline on scoped runs: no false out-of-sync warning on filtered runs. (#1904, fdffae9)
Prelude
- DateTime types: precise constant types and format() return type. (#1917, 70e6094)
Database
- Vendor watcher: stops adding vendor-path files as host files. (#1912, f1eaf73)
🏗️ Internal
Language Server
- Experimental language server removed from the distribution, it is now available on the feat/language-server branch. (131b34c)
CI / Tooling
- Fuzzing & Miri: scheduled fuzz action and Miri job; fuzzers built for the gnu target so ASan links. (48a3cf1, b0dbd5f, 3b7f34b)
- Stacked Borrows UB: word interner reads interned bytes via the raw entry pointer. (e9bd270)
- Toolchain: workspace builds on Rust 1.96.0; routine nightly pins. (35e53c2, #1925)
- MAGO_THREADS tests: no longer fail when the env var is set. (#1895, e2a9d31)
- Dependencies: bump tar to 0.4.46. (#1920, b220deb)
🙏 Thank You
Contributors
A huge thank you to everyone who contributed code to this release:
- @dotdash: #1873, #1916, #1912, #1940, #1895
- @gsteel: #1917
Issue Reporters
Thank you to everyone who reported issues that 
1.29.0 23 de maig del 2026 — 64 bits ZIP
Notes de la versió
Mago 1.29.0
A maintenance release with two themes: tightening generic template inference (the #1859 false-positive cluster) and giving closures + anonymous classes stable, human-readable names. New: three WordPress security rules, regex-based ignore patterns, symlinked-vendor support, and a no-fully-qualified-global-function follow-up that migrates use function imports in one pass. Plus the usual analyzer, formatter, and language-server fixes.
✨ Features
Codex
- Readable closure & anon-class names: {closure:src/foo.php:12:5} replaces opaque hash identifiers in messages and baselines. (#1872, 8c7751d)
Reporting
- Regex-pattern ignores: [analyzer] ignore entries accept pattern = "..." matched against issue text. (#1866, d769368)
Linter
- WordPress security rules: nonce-verification, prepared-sql, validated-sanitized-input under the wordpress integration. (#1572, 64ec53e)
- use function migration: under namespaced = true, bare imported calls rewrite to namespace-prefixed form and the orphan import is dropped. (#1843, e23fdfc)
Docs
- Copy linter rule names without expanding details: rule heading anchors are click-to-copy. (#1890, 720f3c7)
🐛 Bug Fixes
Analyzer
- Top-level template pinning: Column<T> matched against IntColumn pins T; nested-container literals still union freely. (#1859, 491374f)
- redundant-logical-operation on &&-assign: silent on short-circuit assignment idioms like $x === 't' && $y = 1. (#1869, 6f957d6)
- String-casing preserved in assertion intersection: lowercase-string etc. keep their narrowing. (#1879, 61764f1)
Codex
- Property docblock inheritance: typed properties pick up @var from parent class declarations. (#1885, 1e36833)
Formatter
- Promoted-property docblocks stay on their own line: when the parameter list breaks. (#1874, 04a0c37)
- Constructor parens on chained new: preserved for (new Foo())->bar() shapes. (#1875, 4e86fc2)
Semantics
- Invalid bare-class new member access: new Foo->bar() etc. surface a proper diagnostic. (#1875, 4e86fc2)
Linter
- $this pre-declared in variable-usage analysis: stops no-redundant-variable flagging $this reassignment. (#1868, 191902b)
- prefer-fake-helper inside interpolated strings: report-only, no auto-fix that would produce invalid syntax. (#1870, ce50ef1)
Docblock
- Non-ASCII bytes in @var names: accepted in identifier positions. (#1888, fafff67)
Database
- Follow symlinks under paths/includes: composer path-type packages and other symlinked sources are scanned. (#1861, 9d65ff3)
Language Server - Experimental
- Bootstrap events no longer lost: fixes the race during the initial workspace scan. (#1891, 370c724)
- Analyzer issues filtered by config: LSP diagnostics now respect [analyzer].ignore. (#1877, b26ef25)
Config
- mago.dist discovery restored: distributed config file is picked up again. (#1889, 7b8e8fe)
🏗️ Internal
CI / Tooling
- Clippy fixes: applies the latest Clippy lint cleanups across the workspace. (e578c1d)
- Nightly toolchain pins: routine bumps to nightly-2026-05-19 / 2026-05-22. (#1867, #1876, cbc2f68, 3b43f33)
🙏 Thank You
Contributors
A huge thank you to everyone who contributed code to this release:
- @dotdash: #1891, #1877
- @rlorenzo: #1572
- @mvanhorn: #1890
- @HenkPoley: #1889
Issue Reporters
Thank you to everyone who reported issues that shaped this release:
- @kitrio: #1859
- @eran-digipharma: #1866
- @bendavies: #1843
- @mathroc: #1872
- @Tastaturberuf: #1861
- @galiazzi: #1869
- @adam-ja: #1885
- @norberttech: #1868
- @BafS: #1879
- @LocalHeroPro: #1875, #1870
- @oruborus: #1888
- @edsrzf: #1874
Full Changelog: 1.28.0...1.29.0
1.28.0 19 de maig del 2026 — 64 bits ZIP
Notes de la versió
Mago 1.28.0
A feature release led by sound generic type-checking in the analyzer: diamond merges, variance, bounds, Liskov substitution, and constructor arity are now all enforced. The linter gains five Laravel-focused rules, and the CLI picks up a version subcommand, a configurable version-drift-fail-level, and --remove-outdated-baseline-entries for pruning stale baseline entries. Internally, PHP source handling moves to a byte-native representation, retiring mago-atom in favour of mago-word and mago-bytes. The rest is a batch of analyzer and formatter fixes.
✨ Features
Analyzer
- Sound generic type-checking: enforces diamond merges, variance, bounds, Liskov substitution, and constructor arity. (5af93b3)
Linter
- Laravel rules: five rules for test assertions, queries, fake(), casts, and validation. (#1838, #1837, #1836, #1834, #1833, 6156709)
CLI
- version subcommand: prints the version, mirroring the --version flag. (#1840, d93d75a)
- version-drift-fail-level: fail the run on minor or patch version drift, not just major. (#1864, 980dbfa)
- --remove-outdated-baseline-entries: prunes baseline entries that no longer match any issue. (#1865, d35e9d3)
🐛 Bug Fixes
Analyzer
- redundant-type-comparison false positives: impossible negated assertions are no longer flagged. (#1842, c52b5bd)
- Template defaults at call sites: a template's declared default type is now applied at the call site. (#1856, e8d5a84)
Formatter
- Mid-line echo tags: indent alignment restored for echo tags that don't begin a line. (#1857, bae65db)
📖 Documentation
- WinGet: installation guide now mentions the WinGet package. (#1844, f9c6cc6)
🏗️ Internal
Refactor
- Byte-native source handling: PHP source moves to bytes; mago-atom replaced by mago-word and mago-bytes. (#1862, 2a1b5a9)
CI / Tooling
- Clippy fixes: applies the latest Clippy lint cleanups across the workspace. (ab624ca)
- Nightly toolchain pins: routine bumps, now on nightly-2026-05-18. (#1845, #1855, #1858, #1860, #1863, 489e310)
🙏 Thank You
Contributors
A huge thank you to everyone who contributed code to this release:
- @dotdash: #1856, #1857
- @rafaucau: #1844
Issue Reporters
Thank you to everyone who reported issues that shaped this release:
- @LocalHeroPro: #1838, #1837, #1836, #1834, #1833
- @Zuruuh: #1864, #1865
- @maximal: #1840
- @bendavies: #1842
Full Changelog: 1.27.1...1.28.0
1.27.1 13 de maig del 2026 — 64 bits ZIP
1.27.0 13 de maig del 2026 — 64 bits ZIP
1.26.0 6 de maig del 2026 — 64 bits ZIP

El més popular a Utilitats per a desenvolupadors

Mostra-ho tot
  1. WinMergeUtilitats per a desenvolupadors · Thingamahoochie Software
  2. jqUtilitats per a desenvolupadors · jqlang
  3. x64dbgUtilitats per a desenvolupadors · x64dbg
  4. BiomeUtilitats per a desenvolupadors · BiomeJS
  5. deltaUtilitats per a desenvolupadors · Dan Davison
  6. ValeUtilitats per a desenvolupadors · errata.ai
  7. jadxUtilitats per a desenvolupadors · Skylot
  8. dnSpyUtilitats per a desenvolupadors · dnSpyEx
  9. Detect It EasyUtilitats per a desenvolupadors · horsicq
  10. DifftasticUtilitats per a desenvolupadors · Wilfred Hughes

Etiquetes

Comparteix