Skip to content

Releases: tommy-xr/functor

v0.1.2

v0.1.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 02 Aug 13:55
54a6a84

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

v0.1.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 19 Jul 20:18
52aae3c

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 expect tests + functor-lang test verb (#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

v0.1.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 18 Jul 13:51
4158aa7

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 wasm exports 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 with updates + local let mut (non-capturable) (#163)
  • B4 — gradual annotation-based typechecking, mle check (#161)
    ...
Read more