Release: 0.33 - Quicksilver
0.33.0 - Quicksilver
Released 2026-04-17 · GitHub release
New router + http-client + AI modules, UUID/ratio literals, constructor shorthand, many new predicates/seq fns, transient fast-paths, phel\str→phel\string.
🎉 Added
Tooling & CLI
cache:warmcommanddebug:container,debug:dependencies,debug:modules,list:modules,profile:report,validate:configcommandsbuild/preload.phpopcache preload scriptphel doctorBuild health check and Gacela module health checks
Build & Caching
ScopedCachefor dependency-aware cache invalidation#[Cacheable]on directory lookups and namespace encodingcache:clearclears Gacela class-name and merged-config caches
Testing
ContainerFixturetrait resets Gacela container between testsuse-fixturesfor:each/:oncefixtures (#1439)
Reader & Compiler
(use ClassName [:as Alias] ...)top-level form(ClassName. args)constructor shorthand (#1359)#uuid "…"tagged literal (#1376)- Ratio literals
N/M;1/0→INF,0/0→NaN :symsmap destructuring
Predicates
ident?,simple-ident?,simple-keyword?,simple-symbol?(#1369, #1381)special-symbol?(#1384),ifn?(#1370)neg-int?,pos-int?,nat-int?(#1374)sequential?(#1380),seqable?(#1379)any?,ratio?,instance?(#1433)
Sequences & Collections
nth,nthrest,nthnext(#1375)fnext(#1368)rseq,reversible?(#1378)empty(#1365)key,val(#1372)(keyword ns name)arity (#1428)mapcatmulti-collection arity (#1428)- Transients callable like persistents (#1428)
PHP Interop
aget,asetwith nested index support (#1356)int-array,long-array,float-array,double-array,short-array(#1382)int,long,shortcoercion (#1371, #1383)uuid?,parse-uuid(#1377)alter-var-rootstub (out of scope) (#1357)parse-doubleacceptsInfinity,-Infinity,NaN(#1428)alength(#1433)
Observability
tap>,add-tap,remove-tap; synchronous dispatch, swallows tap exceptions
Modules
phel\router: data-driven router onsymfony/routing;routes,:route-name, per-case error handlersphel\http-client: outbound HTTP over PHP streamsphel\ai: chat, completions, structured extraction, tool use, embeddings, semantic searchphel\replAI helpers:explain,suggest,fix,review,embed-ns,search-ns
🐛 Fixed
CompiledCodeCachekeys by source file path (cache version 1.2)keywordidempotent; handlesnil/ symbol (#1428)dissocaccepts zero keys and variadic (#1428)keys/valsreturnnilfornilor empty (#1428)make-hierarchyexposes:parents,:descendants,:ancestors(#1428)firston map returns its first entry (#1428)strpreserves float representation; readableNaN/±Infinity(#1428)comparethrows on cross-category;nilless than non-nil (#1428):keywordlookup on transient maps (#1428)deftestrejects missing/non-symbol names (#1364)(def name)bindsnil(#1361)doseqpair bindings without:in(#1362)doseqiterates maps as[k v]entries (#1433)isaccepts scalar literals (#1433)drop-laston lazy sequences and ranges (#1360)(empty? (range))terminates (#1366)ishandleslet/when/cond(#1367)defrecord/defstruct/defexception/definterfacevalid in statement mode (#1358)defstruct/defrecord/defexception/definterfacenestable in function bodiesphel\routererror dispatch: 404/405/406- Namespace extractors skip build output directory
⚖️ Changed
- Upgraded Gacela to ^1.14;
#[Provides]providers withgetRequired() Phel::run()resolvesFilesystemFacadeviaGacela::getRequired()composer test-qualityrunsvalidate:config- Dropped
phpunit/php-timer; internal resource-usage formatter - Breaking:
phel\strrenamed tophel\string(#1440) (load path): relative from caller file;/pathclasspath-absolute viaphel\repl/src-dirs;./,../,.phelrejectedsrc/phel/core.phelsplit into topic files undersrc/phel/core/- Phel test files reorganized into
core/ phel\routercaches Symfony matcher/generator and precompiles middlewarephel testskips compile failures;--fail-fastaborts
🗑️ Removed
phel\debugnamespace (dotrace,dbg,spy,tap,reset-trace-state!,set-trace-id-padding!)
Performance
- Hot type predicates via
php/instanceof/php/is_*:vector?,list?,set?,keyword?,symbol?,string?,boolean?,integer?,float?,number?,php-array?,indexed?,associative?,sequential?,coll? every?/all?useempty?(O(1) on lazy seqs)select-keysO(|ks|)intotransient fast-path- Transient accumulators in
set,vec,frequencies,merge,merge-with,select-keys,rename-keys,update-keys,update-vals,invert,group-by reverse,sort,sort-by,shuffle,doall, stringnext/rest/seqbuild vectors from PHP array directlyzipcolldelegates tozipmap- Removed shadowed eager
interleave/interpose
👥 Contributors
Full Changelog: v0.32.0...v0.33.0
Downloads
v0.33.0
- phel.phar (1.65 MB)