Repository navigation
Releases: tommy-xr/functor
Releases · tommy-xr/functor
Release list
v0.1.2
Breaking
- BREAKING constructors apply fully — under-application is an immediate arity error (#621)
- BREAKING List.maximum returns Option instead of erroring on empty lists (#596)
Features
- peek the extrapolation on a paused edit (#638)
- module entry roles over the device push protocol (#630)
- branded comparison — 90deg == 90deg, and engine values refuse == at check time (#633)
- unit operators — 90deg + 45deg, resolved by ad-hoc overloading (#628)
- module entry roles on the embedded producer (#623)
- fade the extrapolation preview in and out (#632)
- aspect-true panes — 16:9 cards, edge-attached wires, the seat moves last (#626)
- flash the viewport and glow the marker when a reload lands (#631)
- orbs speaks the real transport (#622)
- guide the paused hero — notice, pulse, reset, and camera grouping (#620)
- add opt-in Vim keybindings (#589)
- unit-suffix literals — 90deg, 0.5s, and user-declared units (#617)
- stage a one-click platformer hero (#587)
- network view — the server hub with live packet flow (#615)
- entries resolve roles from inline modules (#601)
- categorize the API reference (#609)
- grid layout — client cells over a server strip (#611)
- a server pane in the sandbox — run examples/mp end-to-end (#604)
- generate the standard library API reference (#606)
- backward trail — the recorded past beside the predicted future (#608)
- inline-module aware completion, hover, and folding (#595)
- add Math.lerp, Math.smoothstep, and List.minimum (#598)
- inline module declarations (#590)
- host net coordinator — perfect links between panes (#593)
- oriented arrow marks in extrapolation trails (#599)
- net egress/ingress on the embedder seam (#591)
- same-file entries — roles resolve prefixed bindings, native + wasm (#554)
- add model-space look-at IK (#586)
- add screen-to-world picking rays (#584)
- refine debug camera diagnostics (#583)
- add breakout game (#582)
- promote roguelike game (#576)
- add compact unsafe code results (#574)
- add body rotation builders (#575)
- generate typed joint constants (#572)
- add debug camera diagnostic tools (#571)
- run SDK code in an unsafe Node child (#570)
- add universal debug cameras (#569)
- make pointer-led Sprite games resize-correct (#553)
- add opt-in game-owned camera controls (#568)
- add per-entry game jam fix rounds (#567)
- add deterministic snapshot edge sets (#551)
- orbs — the minimal multiplayer sample (#549)
- add deterministic immutable maps (#550)
- develop serves the debug runtime on a default localhost port (#548)
- bake a macro occlusion map for the far field (#546)
- add a deterministic Tetris sample (#540)
- dock the in-frame scrubber at the top (#538)
- language_guide MCP tool over the functor-lang skill (#537)
- one scrubber at every client count — the chrono bar unification (#534)
- author a game entirely over MCP (#536)
- api_reference MCP tool over the embedded prelude docs (#531)
- functor mcp — an MCP server over the debug runtime (#529)
- the model in GET /state is structured JSON (protocol v4) (#528)
- filled circle, polygon, and line sprites (#530)
- multiplayer pane grid — N client panes behind a chrono bar (#526)
- mountScrubber({ hidden }) — the seam without the chrome (#524)
- Sprite.text with an embedded default font (#527)
- synthwave chrome polish for the editor surfaces (#523)
- scrubber rail ticks, full-height markers, and depth polish (#522)
- add terrain to the sandbox as a perf stress test (#521)
- per-axis velocity commands (#514)
- enable fixed foveated rendering, and run at 80 Hz (#520)
- script mouse buttons in --input-script (#518)
- request a display refresh rate, and report what we get (#515)
- walk the terrain, and launch spheres that roll down it (#511)
- Vec3 accessors and arithmetic (#512)
- functor boot loader on the editor surfaces (#510)
- shooting-range — a first-person range with click-to-fire (#507)
- fill the verified stdlib gaps (List/Math/Text) (#506)
- add >=, <=, and != comparison operators (#504)
- a character controller on the physics hook, and Physics.upright (#503)
- add a mouseButton hook and held mouse-button state (#501)
- synchronous world queries — linearVelocity, cast, castExcluding (#492)
- functor test runs a project's expect tests under the engine prelude (#488)
- inject XR poses over the debug protocol (#486)
- generate the sample heightmap with fBm and erosion (#481)
- dress the layered bands with CC0 detail maps (#480)
- mipmap and anisotropically filter loaded textures (#477)
- add 4 km showcase (#471)
- add shared heightfield physics (#470)
- add stereo-stable quadtree rendering (#469)
- run the multiplayer sim in the browser (#474)
- link browser editors to external runtimes (#473)
- add heightmap descriptors and decoding (#468)
- whole-environment time travel — seek the sim, not one client (#472)
- add XR controller interaction (#467)
- emulate XR controllers on desktop (#466)
- expose sampled input snapshots (#465)
- expose sampled Quest controller input (#463)
- add sprite atlas regions and sampling (#464)
- add string interpolation (#461)
- extrapolate 2D sprite trajectories (#462)
- bundle Animator with engine hosts (#459)
- synchronize project assets to Quest (#460)
- add plain-data 2D sprite rendering (#457)
- generate API reference from the prelude (#454)
- add Option and Result stdlib modules (#456)
- compose tracking onto authored cameras (#453)
- add bundled stdlib module substrate (#452)
- alternating gif↔text feature rows with scroll-into-focus reveal (#450)
- llm-native demo GIF generator (#449)
- batteries-included demo GIF + CDN animation example (#448)
- reproducible introspective demo GIF generator (#447)
- reproducible instant-feedback demo GIF generator (#446)
- reproducible time-travel demo GIF generator (#443)
- standalone full-featured demo editor (#445)
- homepage refresh — grounded copy, aurora backdrop, platforms, spacing system (#442)
- add isomorphic debug capture (#438)
Fixes
- lambda-param hover types; keep codelenses through transient parse errors (#641)
- give the gh hover tooltip the pointer hover's chrome (#624)
- resilient hook — degrade on error, uniform read timing, primed cold start (#618)
- selecting a pane hands it the real keyboard (#612)
- teaching errors for <- assignment, qualified constructors, and nested match (#597)
- steer only the horizontal axis, so the walker stops floating (#535)
- unknown type annotations are diagnosed instead of silently disabling checks (#519)
- mario hot-reload test tracks the current jump constant (#517)
- /time advances accumulate, batch, and refuse a fixed-time pin (#495)
- serve the API reference statically so no-JS agents can read it (#489)
- unknown builtin-module members are check-time errors (#485)
- a branch rewinds the subscription-timer window too (#482)
- a refused WebSocket no longer traps the runtime (#475)
- version badge shows the real release on deploy, dev locally (#444)
- use exact per-eye projections (#437)
Performance
- hold 72 Hz on Quest with detail maps enabled (#494)
Docs
- trim sharp edges to the real ones (#616)
- the manual points at the generated API reference (#614)
- group the manual nav (#610)
- the functor-lang skill defers surfaces to the generated reference (#613)
- graduated quick-start tutorial (#605)
- restructure the manual's Get started (#603)
- teach unsafe MCP automation in the hosted manual (#573)
- reproducible MCP demo capture for the AI-native story (#547)
- surface the MCP server in the AI-native story (#539)
- game-jam — CI-matrix, wasm-bundle, and watcher lessons (#532)
- add oculus-profiling for GPU counter analysis (#499)
- game-jam — sweep fixer build caches between heavy agents (#498)
- game-jam — playable gallery tool for judging (#493)
- audit functor-lang skill claims against executed behavior (#490)
- game-jam operational lessons from the first run (#491)
- bring the manual's stdlib, input, UI, and physics coverage back in line with the engine (#484)
- add game-jam skill for multi-agent sample jams (#479)
- split the manual and API reference (#458)
- document the engine prelude (#455)
- show the feature demos as GIFs; add batteries + AI-native (#451)
- readme tweaks (#436)
Refactoring
- orbs adopts module Client/Server over the real transport (#639)
- remove the ghost preview mode and the extrapolation settings popover (#602)
- rename the Camera prelude module to Camera3D (#592)
- load the hero editor as a lazy island behind the boot loader (#516)
- render the IDE chrome with React islands (#513)
- render the sandbox chrome with React islands (#508)
- migrate the entry files to TypeScript (#502)
- migrate lang-intel to TypeScript (#500)
- migrate runtime-target to TypeScript (#497)
- migrate the leaf modules to TypeScript (#496)
- typecheck the editor↔player protocol (#483)
- share one build-time header across pages (#476)
- web reuses the embedded producer (delete FunctorLangWebGame) (#441)
- unify the producer reload clock behind now_ms() (#439)
v0.1.1
Breaking
- BREAKING the asset flag day — bare-string coercion into consumers is retired (B.6) (#419)
Features
- live expect-test gutters — red/green/re-running in VSCode and the web IDE (#435)
- lobby — a pure-.fun master server (register/discover/join, all typed) (#427)
- examples/mp speaks the typed wire — Protocol.Wire replaces the string codec (#426)
- run vr — one-command remote develop on an adb-attached headset (#431)
- POST /reload-source on device — the remote-develop push loop (M1b) (#430)
- typed messages — Effect.sendMsg delivered as Net.Data (#424)
- the embedded Functor Lang producer — real interpreted games on the Quest (M1a) (#428)
- interpreter step budget — bounded expect evaluation for live tooling (#429)
- multi-entry projects — named entries in functor.json + --entry (#423)
- inline
expecttests +functor-lang testverb (#422) - bundle the functor CLI in platform VSIXes — all-in-one install (#416)
- functor.* prefix + a functor status bar item with version tooltip (#410)
- native text input — keyboard routing, focus survival across re-renders (#418)
- download the functor CLI on demand for the live preview (#409)
- webview-animated — CSS @Keyframes + :hover transitions in the webview (#415)
- platform VSIXes with the bundled language server, published on release (#407)
- Effect.preload / preloadThen — warm the asset cache ahead of draw (B.5) (#413)
- Style.* — typed inline styles for the webview (the elm-css split) (#412)
- record webview events for deterministic replay (#411)
- webview — HTML/CSS game UI via blitz (native) + a DOM overlay (wasm) (#404)
- Asset.whilePending — placeholder assets while the real one streams in (B.4) (#406)
- go-to-definition into the .funi prelude, doc comments in hover (#405)
- complete the registry migration; retire the legacy match (#399)
- build verifies asset locators + deprecates bare-string asset args (B.3) (#397)
Fixes
- deep values can't crash in-process tooling — iterative walks + an enforced depth≤budget contract (#432)
- Quest device bring-up — activity context, ANR input drain, Horizon manifest (#425)
- recompute extrapolated history after hot reload (#420)
- sync player.html input bridges with the runtime host page (#403)
Performance
- move blitz parse/resolve/paint to a worker thread (#414)
Docs
- split README into README + DEVELOPMENT; recommend prebuilt binaries (#421)
- open PRs as drafts until verification and media have landed (#408)
- release version badge at the top of the README (#401)
Refactoring
- asteroids adopts List/Math/boolean builtins + clear color (#434)
v0.1.0
Features
- version + pre-alpha badge in the site header (#392)
- migrate Physics, Asset, and Anim to the external registry (#393)
- .asset.json sidecars — remote (CDN) assets in the typed manifest (B.2b) (#391)
- add the Functor icon — favicon, VS Code file icon, header mark (#389)
- functor import generates the full typed asset manifest (B.2) (#387)
- migrate the rendering vocabulary to the external registry (#385)
- execution-recency gutter — parity with the web editors (#386)
- numeric loop sites show their min…max range inline (#383)
- Asset.model/texture/sound — branded asset locators (B.1) (#384)
- typed external registry for the Functor <-> Rust bridge (#377)
- brand spatial vectors as an opaque Vec3 value (#372)
- Sub.assets — loading progress as a subscription, with examples/loading (#378)
- journal ring + per-frame execution coverage on the trace (#379)
- live values in the sandbox and web IDE while paused (#375)
- brand colors as an opaque Color value (#369)
- trace v2 — draw pass, previews, and reference sites on the wire (#374)
- value previews, kind, and reference-site recording (#373)
- hot-reload asset files on the desktop runtime (#368)
- type input keys as the built-in Key variant (#366)
- VSCode-style status bar with Problems and Output panels (#363)
- wire project-aware language intel into the IDE editor (#362)
- load assets from URLs natively, with a verified disk cache (#365)
- brand Random seeds as an abstract Random.Seed type (#364)
- project-aware analyze/hover/complete for multi-file editing (#361)
- make the time-travel timeline stable and extensible (#354)
- a browser IDE — multi-file editing, live preview, project download (#349)
- functor_lang_set_project — multi-file hot-swap seam for the web IDE (#348)
- Ui.center() anchor — pin a panel to the screen center (#337)
- wasm emits inspector traces — the VS Code preview auto-connects (#350)
- literals inside tuple/ctor patterns (#334)
- skip non-identifier / dot-prefixed .fun siblings (#333)
- if/else conditional expression (#345)
- inspector attach/detach commands + trace relay (#342)
- live-value inlay hints + execution picker from paused traces (#341)
- replay journal + GET /trace — the paused-scene inspector data path (#340)
- per-call binding-site recorder for the paused inspector (#339)
- pure seeded PRNG — Random.step / Random.range (#328)
- math builtins — sqrt, atan2, abs, floor, mod, min, max, pow, pi (#327)
- per-node translations + bbox in the model report (#335)
- Frame.withClearColor — explicit background clear color (#332)
- short-circuiting boolean operators && / || / not (#330)
- List.length/append/flatten/any/all/reverse/isEmpty + clearer depth-cap error (#326)
build wasmexports a self-contained static web bundle (dist/web) (#325)- scrubber redesign — future bar, ⚙ popover, ghost as a mode (#323)
- asteroids — a complete end-to-end game (menu, waves, score, sound) (#324)
- scene-diff preview in the scrubber, both shells (T6) (#321)
- scope-aware completion — locals in scope and typed record fields (#319)
- scene-space strobe — full-intensity future copies (T6) (#318)
- textDocument/completion — dot-completion off the last-good parse (#316)
- lit skinned material — skinned models shade with the frame's lights (#301)
- the ui widget showcase — every interactive widget in one panel (#299)
- Ui.textInput — controlled text editing with the keyboard focus gate (#297)
- extension + .fun file icons, package/install scripts (#296)
- functor import — typed clip constants from a project's glTF models (#295)
- Ui.slider + Ui.row + the remaining anchors (#294)
- Ui.button — the first interactive widget, with examples/counter (#293)
- Animator crossfade module + A/B demo (#292)
- the UI-event seam — slot-addressed widget events fold through update (#291)
- Add/Mask/Rotate/Rest nodes — additive layers, masking, per-joint control (#290)
- declarative animation — Anim.clip / Anim.blend + Scene.animate (#287)
- implement MLE project scaffolding (#282)
- author full host prelude as .mlei + hard-bijection drift test (2e-ii) (#275)
- functor-prelude crate + Scene .mlei + check-time prelude wiring (2e-i) (#274)
- host-agnostic prelude injection hook (load_with_prelude) (#273)
- interface files (.mlei) — bodyless signatures + interface-only modules (#272)
- abstract (opaque) types — type SceneNode (#271)
- let-binding type annotations — let name: Type = value (#270)
- function & tuple type syntax — (A, B) => C, (A, B), grouping (#269)
- inlay hints, signature code lens, and project-aware analysis (#268)
- partial-application-aware diagnostic — recover the forgotten-argument error (#266)
- thread-last piping + subject-last prelude (currying migration step 3) (#265)
- call-site currying + partial application (currying migration step 1/5) (#264)
- interpreter benchmark framework + seed corpus (
mle bench) (#263) - Debug.log — pipe-friendly trace through the region-aware log path (logging PR-4b) (#262)
- region-aware logging — log events + Rust log facade (logging PR-4a) (#261)
- web forward-ghosting + DOM ghost toggle (#258)
- rich MLE diagnostics + error hints + ASCII fallback (UX pass PR-3/3, closes) (#259)
- live-region TUI + sticky telemetry panel (UX pass PR-2b) (#254)
- native egui ghost toggle + divisions/time controls (#257)
- F2 — forward-ghost a scripted jump (tweak-a-constant demo) (#255)
- F1 — sub-stepping in the forward-step (accurate velocity arcs) (#253)
- route in-process runtime output through the event stream (UX pass PR-2a) (#252)
- T6b-3 — scripted-input capture for deterministic headless runs (#251)
- T6b-2 — frame-indexed input log + replay in forward-step (#250)
- output event stream + JSON renderer (UX pass PR-1/3) (#249)
- mario — model-driven platformer with a chasm (time-travel demo vehicle) (#247)
- T6d forward-ghosting — composite N stepped frames (--ghost) (#246)
- deterministic headless forward-step (T6b) (#244)
- tts is a game clock — scrubbing rewinds time-driven visuals (#242)
- T5 screen-space compositor + fork-overlay demo (#236)
- port lighting to MLE — the culminating E2 port (#231)
- T2+T3 — shell-owned egui scrubber overlay (first cut) (#226)
- audio API — one-shots + soundScape (E2) (#230)
- Light.spot + Scene.litNormalMapped prelude surface (E2) (#229)
- List.grid + Scene.scaleXYZ + synthwave port (E2) (#228)
- HTTP effect primitive + netdemo port (E2) (#227)
- POST /rewind — drive the coupled scene rewind live (#225)
- port mpclient to MLE (E2) (#224)
- port mpserver to MLE (E2) (#223)
- T1c — coupled scene rewind (model + physics together) (#222)
- Text.split/join/parseFloat string builtins (E2 groundwork) (#220)
- T1b — record the MVU model each rendered frame (#219)
- T1 — History model snapshot ring + design doc (#218)
- list patterns + cons — [a,b] / [head, ..rest] / [x, ..xs] (#217)
- MLE networking surface — Sub.connect/listen, Effect.send, Net ADT + ws ports (#216)
- Phase 6 — pause/rewind/replay (the culmination) (#215)
- C4b-5 — the skybox surface + the finished mle-atmosphere demo (#208)
- E1 complete — full-frame hello parity (heightmap, textures, HUD) (#214)
- Phase 5 — collision events (Physics.events sub) (#212)
- pixel-type accents + status tooltip seam (#211)
- Phase 4 — Physics.raycast as a deferred tagger effect (#207)
- cubemap skyboxes — a frame-level six-face sky (#204)
- B8 part 1 — multi-file modules: file = module, qualified by default (#210)
- docs section — MLE reference with run-in-sandbox snippets (#203)
- B6.5 — structured effect payloads (EffectValue) (#206)
- E1 — hello's glTF lineup + free-look camera, ported to MLE (#205)
- C4b-4 — the fog surface + examples/mle-atmosphere (#202)
- distance fog — a frame-level Fog value on every forward material (#201)
- generic type declarations — type Box, checker-only (#199)
- functor website + in-browser MLE sandbox (#198)
- D3b — go-to-definition (#196)
- B7 — Hindley–Milner inference with gradual seams (#197)
- Phase 3 — command effects (applyImpulse/applyForce/setVelocity/teleport) (#195)
- C4b-3 — the render-target surface + examples/mle-monitor (#194)
- D4 — live game preview in the editor, model-preserving reload in the browser (#192)
- Quest OpenXR runtime shell — cross-compiles + packages to APK (#189)
- render targets — named offscreen passes sampled as textures (#191)
- B6 — the minimal effect broker: Effect.* with real/fake/replay runners (#190)
- C5 — MLE games on wasm: the interpreter producer in the browser (#188)
- tuples — literals, patterns, destructuring let, product types (#187)
- 2b — collider wireframe overlay (--debug-render physics) (#186)
- network hot-reload for MLE — POST /reload-source + functor push (#183)
- B5 part 2 — stored closures rebind across hot reload (#184)
- launch hidden by default, visible: true escape hatch (#182)
- mle-physics — the reference physics example (Phase 2c) (#181)
- C4b-2 — the MVU pair: update/messages + subscriptions (#179)
- --hidden — capture/debug runs without stealing input (#178)
- Phase 2 — the MLE physics surface (Physics.* prelude + hook) (#176)
- --xreal-tracking — Xreal One 3DoF head tracking (#177)
- --stereo-sbs side-by-side stereo rendering in functor-runner (#175)
- B5 part 1 — variant types (ADTs) + match, through the whole stack (#174)
- branded Angle values — degree/radian confusion is unrepresentable (#173)
- 1b — the Simulatable/Timeline rewind seam (#172)
- C4b-1 — mouse input, the lit prelude, the primitives port (#171)
- 1a — world spine (rapier, declarative scene, reconcile, determinism goldens) (#170)
- C4a — input into the MLE model + functor.json wiring (#168)
- Escape releases the cursor; click recaptures (#169)
- C3 — hot reload with model preservation, e2e-proven (#167)
- C2 — the real MLE producer; delete the spike (#165)
- hover/quick-info + type diagnostics in the editor (D3a) (#164)
- record
withupdates + locallet mut(non-capturable) (#163) - B4 — gradual annotation-based typechecking, mle check (#161)
...