Skip to content

Latest commit

 

History

History
960 lines (715 loc) · 54.5 KB

ChangeLog.md

File metadata and controls

960 lines (715 loc) · 54.5 KB

Unreleased

  • With no Scene view, as in a batch-mode editor, every edit-mode preview ticks unless one is selected
  • ProjectSetup.Initialize logs its info lines without stack traces
  • ProjectSetup.GenerateTypings writes types/csharp.d.ts from batch mode

[2026-10-31] v3.9.14

A world-space panel keeps running in Play Mode when its GameObject is off camera, and JS can move an element with element.transform.position. JS arrays now pass where C# takes a list.

  • Play Mode ticks every JSRunner, as a build does; the overlay's Game mode applies to edit-mode previews only
  • element.transform.position and scale can be set and read from JS
  • A C# object JS reaches through an interface is its own proxy: el.transform !== el
  • Writing el.position on an element fails with a message pointing at el.transform.position
  • Scene: Auto picks the runner whose content is closest, not its origin
  • A JS array or typed array passes as a C# List<T> (#151)
  • An unfocused editor starts a runner's preview without waiting for focus (#141)
  • A rebuild that changes nothing no longer makes Unity reimport the bundle (onejs-unity #9)
  • New projects get onejs-unity 0.11.2

[2026-10-28] v3.9.13

C# constructors with default parameters can be called from JS without them, and generic types, extension methods and array parameters now typecheck the way they already ran. On WebGL every app's onPlay and onStop run, and useEventSync reports a C# event or property that throws instead of hiding it.

  • new calls a C# constructor whose trailing parameters have defaults, with them left out (#146)
  • On WebGL, onPlay and onStop run for a strict bundle, as every scaffolded app's is (#145)
  • Generated types: a generic class is callable with its type arguments, as List(Int32) (#148)
  • Generated types: an extension method keeps its this parameter on its static class (#149)
  • Generated types: an array parameter takes a JS array or typed array (#150)
  • useEventSync logs an event accessor or getter that throws, and warns only about a missing event (#152)
  • compute.struct's stride is the HLSL struct's size, with no rounding to 16 bytes
  • New projects get onejs-react 0.4.3, onejs-unity 0.11.1 and ojplay 0.12.2

[2026-10-20] v3.9.12

Updating from 3.9.3 or earlier left the old UICartridgeEditor.cs in the project, where it no longer compiles. Updates now replace it and every other file a release renamed or removed, including in a project an earlier update already broke.

  • Updating from 3.9.3 or earlier no longer leaves UICartridgeEditor.cs and five other renamed files behind
  • An update replaces every file a v3 release renamed or removed

[2026-10-17] v3.9.11

Shader programs can now read what another program drew this frame, for bloom, blur and other effects in passes, and can show a low resolution as crisp pixels. An app holding a play.onejs.com cart moves to the project root with one button, and on WebGL a second JSRunner no longer breaks the first.

  • Shader programs read other programs' output this frame through passes (usePass)
  • ShaderEffect and ShaderProgram take pixelated for hard-edged pixels at a low resolution
  • Move to Project Root on an app whose ~ holds an oj.json makes it a root cart
  • On WebGL, each JSRunner runs in its own realm, so a second no longer takes over the first (#140)
  • On WebGL, an animation frame cancelled in the same pass no longer runs after its runner is destroyed (#142)
  • An app's watcher stops when the editor quits, even after a domain reload with its scene closed (#143)
  • Set Up and one-shot builds finish in an unfocused editor
  • New projects get onejs-react 0.4.2 and ojplay 0.12

[2026-10-14] v3.9.10

A player build no longer leaves the carts' files in the project, a cart runner names its cart problem before a missing Panel Settings, and OneJS builds without compiler warnings. On Unity 6.5, JSRunner's inspector says to keep the UIDocument rather than migrate it to Panel Renderer.

  • A player build removes StreamingAssets/onejs/carts from the project when it ends, passed or failed
  • A cart runner with no Panel Settings logs a missing or duplicate cart name first
  • No compiler warnings from OneJS in a player build
  • On Unity 6.5+, JSRunner's inspector says not to migrate its UIDocument to Panel Renderer

[2026-10-14] v3.9.9

A JSRunner can now run a play.onejs.com cart from its own folder at the project root, picked by name in the inspector, and apps under Assets work exactly as before. Shader programs take up to 64 uniforms and 8 textures, and choose how each texture wraps and filters.

  • A JSRunner can run a root cart, linked by its oj.json name
  • Saved scenes gain an empty _cart line on each JSRunner, the new field's default
  • Shader programs take 64 uniforms and 8 textures
  • A shader program can set a texture's wrap and filter, and read its size and its texels unfiltered
  • New projects get onejs-unity 0.11, onejs-react 0.4.1 and ojplay 0.11

[2026-10-10] v3.9.8

Mouse, input and transition events now fire, a project that cloned OneJS into Assets/OneJS draws its shader programs, and new projects start with Tailwind's preflight on. Programs recorded from code now live in Assets/OneJS.Recorded.sl.json, and the editor moves an existing recording there by itself.

  • InputBridge.GetKeysPressed lists the keys that went down this frame in the order they did
  • On WebGL, a second JSRunner warns that it takes over the first
  • Shader programs draw in a project that cloned OneJS into Assets/OneJS
  • onMouseDown, onMouseUp, onMouseMove, onMouseEnter, onMouseLeave, onMouseOver and onMouseOut fire
  • onInput fires as a TextField's text is typed
  • onTransitionRun, onTransitionStart, onTransitionEnd and onTransitionCancel fire, and bubble as in a browser
  • The Type Generator declares generic types under the $N name their subclasses extend, so inherited members are typed
  • A JSRunner without Panel Settings warns once in Play mode instead of doing nothing silently
  • Programs recorded from code go to Assets/OneJS.Recorded.sl.json, moved from Assets/OneJS/ on the next recording or build
  • New projects start with Tailwind's preflight on; existing projects keep their build config
  • The Type Generator leaves test assemblies out unless asked
  • The scaffold installs onejs-react 0.4, which drops the drag, tooltip and context click props that fired only in Editor windows

[2026-10-09] v3.9.7

filter and backdrop-filter now work in USS, CSS Modules and inline styles, React updates cross to C# fewer times, and events that JS causes arrive as they would in a browser. On WebGL, a sideways wheel scrolls and event values arrive at full precision.

Migrating: a value React sets no longer fires onChange, as in React DOM, so act on the new value where you set it rather than in the handler. Run npm update in your app for onejs-react 0.3.2, onejs-unity 0.10.2 and unity-types 6000.5.3, which carry the style, text and event fixes.

  • Shader effects and particles draw their first frame after leaving play mode
  • A React text or style update crosses to C# once instead of up to three times
  • A React class update crosses to C# once, and a text merged into its parent's text makes no element of its own
  • filter and backdrop-filter work in USS files, CSS Modules and inline styles
  • A style React removes falls back to the stylesheet's value instead of 0 or transparent
  • On WebGL, pointer, wheel and viewport values arrive at full precision, and focus change events fire
  • onGeometryChanged rects arrive at full precision
  • On WebGL, a sideways wheel or trackpad swipe scrolls
  • A shader program that reads its previous frame no longer drifts where anisotropic filtering is forced on
  • An fx chain no longer softens or drifts where anisotropic filtering is forced on
  • A focus or click that JS causes runs its handler at once, and microtasks wait until the JS returns
  • A value React sets fires no onChange, and a text changing never fires one
  • A text inside <Text> that React reorders or Suspense hides shows once, or not at all

[2026-10-06] v3.9.6

Closing or reloading a OneJS UI now frees everything it made, compute buffers move about five times faster, and Tailwind 2xl: classes work. A WebGL build at Medium or High stripping now renders.

Migrating: an Int32Array or Uint32Array compute buffer now reaches the shader as integers, so declare it int or uint where the shader read it as float. An integer too large for an int field now throws instead of arriving as 0, so a field that takes large values becomes a long. Run npm update in your app for onejs-react 0.3.1 and onejs-unity 0.10.1, which carry the 2xl: fix, the faster buffers and the colour fix.

  • A destroyed or unassigned Unity object reads as null in JS
  • A C# exception that JS catches logs nothing; an uncaught one logs with its C# stack
  • A paused shader program shows the frame drawn into its new size on WebGPU
  • Compute buffers write about 5x and read about 2x faster
  • An Int32Array or Uint32Array compute buffer now reaches the shader as integers, not floats: declare it int or uint
  • An integer past Int32 in an object from JS, such as Date.now(), arrives whole instead of as 0
  • An integer too large for an int field throws instead of arriving as 0
  • A WebGL build with managed stripping at Medium or High renders instead of failing with "Type not found"
  • Tailwind 2xl: classes apply
  • Closing or reloading one OneJS UI now frees its GPU buffers, shaders, input bindings, sounds and 3D scene
  • Procedural colours read #fff and short hex correctly; an unreadable colour is an error instead of a wrong colour

[2026-10-02] v3.9.5

Errors now log with their stack and open the line that threw, players ship React's production build, and 3D models load from .glb files. The API review's new names arrive beside the old ones, and a new project builds with onejs-unity build on onejs-react ^0.3.0, onejs-ui ^0.0.6, onejs-unity ^0.10.0 and ojplay ^0.10.0.

Migrating: restart the Editor after updating, since the native library changed. Copy the template's esbuild.config.mjs and build scripts, add onejs-unity/globals to tsconfig types, and delete the copied declarations from types/global.d.ts. fetch now rejects when no response arrives, so code checking status === 0 moves to try/catch. localStorage keys live under onejs: in PlayerPrefs (old keys move over on first read), so C# reading them adds the prefix. Re-enabling a JSRunner calls onStop before onPlay. Unhandled promise rejections now log as errors. The API review's new names (onejs.*, useFrame, drawing, toRGBA, open/onOpenChange, fx.useAnimation) sit beside the old ones, which keep working.

  • JSRunner's Globals are declared for TypeScript in types/jsrunner.d.ts, each with its C# type
  • Every public global is also under one onejs namespace
  • onejs.cs.typeExists says whether a C# type is loaded
  • Unhandled promise rejections log as errors on native platforms
  • Errors log with their stack, and a JS error's Console entry opens its source line
  • Passing the same function to a C# method twice gives the same delegate, so RemoveListener(fn) works
  • A C# method call from JS crosses once instead of twice
  • fetch rejects with a TypeError when no response arrives
  • localStorage keeps to its own onejs: keys; key(), length and clear() work
  • localStorage saves to disk a second after the last write
  • setImmediate yields to the next frame when an immediate reschedules itself
  • Re-enabling a JSRunner calls onStop and fires Reloaded
  • JSPad sets __isPlaying and calls onPlay and onStop
  • JSPad ships React's production build and keeps the development build for Play mode in the Editor
  • Image fx chains start from a texture you hold
  • QuickJSNative.InteropCallCount counts JS to C# calls
  • 3D models from .glb files through glTFast, for ojplay's useScene and useModel
  • Models cast and receive soft shadows under a sun, sky and ground ambient, fog and point lights
  • glTF materials keep metallic, roughness, normal, occlusion, emission and alpha
  • Models turn on all three axes, scale after spawning and play at their own speed
  • A C# static holding null reads as null instead of a path proxy
  • releaseObject works on any C# object
  • Timeouts due in the same frame run in due order
  • fetch sends PATCH and other methods as themselves, with their body
  • Headers and URLSearchParams are iterable; an empty header reads as ""
  • InputBridge reports Input System action phases, so action.on() in onejs-unity fires
  • Player builds rebuild each app with NODE_ENV=production, so players ship React's production build
  • An app that does not build fails the player build instead of shipping a stale bundle
  • New projects build with oneJSConfig and onejs-unity build, from onejs-unity 0.10
  • New projects type the runtime's globals with onejs-unity/globals in tsconfig
  • New projects depend on onejs-react ^0.3.0, onejs-ui ^0.0.6 and ojplay ^0.10.0

[2026-10-01] v3.9.4

UI Cartridges are now Packs, and a project made before the rename keeps working as it was. A new project's global.d.ts types fetch, URL, localStorage and the other web globals the runtime installs.

  • UI Cartridges are now Packs: Pack, the Packs tab, __pack() and ~/@packs/
  • A runner made before the rename keeps extracting to ~/@cartridges/
  • The old names still compile and run, marked obsolete
  • Breaking: CreateInstance<UICartridge>() returns null; create a Pack
  • Breaking: editor code reads the list as "_packs", and Pack.Files holds PackFileEntry
  • The template's global.d.ts declares fetch, URL, localStorage, AbortController and the other web globals the runtime installs
  • Existing projects: replace types/global.d.ts with the package's Editor/Templates/global.d.ts.txt, keeping your own additions

[2026-10-01] v3.9.3

An npm package's art now reaches player builds, and an agent or script can set a project up with one batch-mode call, no inspector needed. A new project depends on ojplay, the new name of onejs-play, and on onejs-unity ^0.9.2.

  • OneJS.Editor.ProjectSetup.Initialize sets a project up from -executeMethod, with no inspector
  • npm packages' assets/@namespace folders ship in player builds
  • A struct that holds a class, such as FillGradient, assigns to Painter2D.fillGradient instead of throwing
  • A new project depends on ojplay ^0.9.1 in place of onejs-play, and on onejs-unity ^0.9.2
  • The template's global.d.ts declares onejs:themes, which TypeScript 6 and newer require
  • Existing projects: npm update onejs-unity brings 0.9.2, which finds npm package assets in the Editor

[2026-09-30] v3.9.2

Two JSRunners in one scene no longer tear down each other's particles, physics and effects, and awaiting a C# Task that already failed now rejects. A new project depends on onejs-react ^0.2.2 and onejs-ui ^0.0.5, whose popovers and menus close on a press outside them or on Escape inside a dialog.

  • Reloading, disabling or destroying one JSRunner no longer disposes another's particles, physics worlds, shader effects or fx textures
  • Awaiting a C# Task that already faulted or was canceled rejects instead of resolving
  • A new project depends on onejs-react ^0.2.2, onejs-ui ^0.0.5 and onejs-play ^0.8.3
  • Existing projects: update onejs-react to ^0.2.2 and onejs-ui to ^0.0.5 together; onejs-ui 0.0.4 on onejs-react 0.2.2 reopens a popover when its trigger is pressed

[2026-09-29] v3.9.1

A shader program can read the frame it drew before, and count frames and the time between them, for trails, feedback and effects that settle; bump onejs-unity to ^0.9.1 for them. Existing programs draw as they did.

  • Shader programs: tex2D(previous, uv) reads the frame drawn before
  • Shader programs: frame and deltaTime
  • ShaderEffectElement.Step draws exactly one frame, and Frame counts them
  • Shader programs: an int uniform is typed as an int, and uint constants past 2^31 fold correctly
  • A new project depends on onejs-unity ^0.9.1, onejs-react ^0.2.1 and onejs-play ^0.8.2

[2026-09-28] v3.9.0

Shader programs get real branches and loops, and int, uint and bool; bump onejs-unity to ^0.8.1 for them. Every shader program's hash changes once, so if you build programs in code, run the app in the editor once and commit Assets/OneJS/Recorded.sl.json before your next build.

  • Shader programs: if is a real branch, and return works anywhere
  • Shader programs: while, break, continue and switch, and loops that stop early
  • Shader programs: int, uint and bool, with bit operators
  • Shader programs: tex2Dlod reads one mip level
  • A shape's parameters and an octave count may be any value, a uniform included
  • A native build stops when a recorded program is under a hash scheme no app produces, and says to run the app in the editor once
  • Recording a program drops the one it replaces
  • A new project depends on onejs-unity ^0.8.1, onejs-ui ^0.0.4 and onejs-play ^0.8.1

[2026-09-28] v3.8.0

Every shader program now draws from its compiled shader, and the old interpreter is gone. Bump onejs-unity to ^0.7.0 and onejs-react to ^0.2.0 with it.

  • The shader language VM is gone: a program with no compiled shader draws nothing, and ONEJS_SL_VM does nothing
  • SLProgramBridge.Upload and CreateMaterial take a program's hash and uniform names only
  • SLProgramBridge.Exists replaces HasNoVm
  • ShaderEffectElement.SetProgram ignores its VM arguments, and SetCompiled does nothing
  • A program built in code is refused past 16 uniforms or 4 textures, as a file is
  • A new project depends on onejs-unity ^0.7.0, onejs-react ^0.2.0 and onejs-play ^0.8.0

[2026-09-28] v3.7.0

A shader program is no longer held to the old interpreter's 256 instructions and eight live values. Bump onejs-unity to ^0.6.0 and onejs-react to ^0.1.60 to lift them; a project that stays on onejs-unity 0.5 keeps working as it did.

  • A shader program with no VM encoding, as onejs-sl 0.2.0 builds it, draws from its compiled shader
  • ShaderEffectElement.AcceptsCompiledPrograms tells a host it can send one
  • ONEJS_SL_VM does nothing for a project on onejs-unity 0.6, whose programs carry no VM encoding
  • Shader programs have no length or live value limit on onejs-unity 0.6
  • A new project depends on onejs-unity ^0.6.0, onejs-react ^0.1.60 and onejs-play ^0.7.0

[2026-09-28] v3.6.0

A shader program's noise, fbm and voronoi, and value fx.noise, look different at every seed, and now look the same on every GPU; simplex, turbulence and ridged noise don't change. A shader program with no compiled shader draws nothing instead of running on the VM, and an existing project should bump onejs-unity to ^0.5.20 so its noise on the web matches the editor.

  • A native player missing a program's shader draws nothing and logs one error naming its hash, instead of running the VM
  • The editor compiles a shader program the first time it draws it, and draws nothing until then instead of running the VM
  • Every load of an app generates the shaders for its .sl files before it runs
  • JSPad loads .sl files
  • The shader language VM is off, and left out of every player, unless ONEJS_SL_VM is defined
  • A WebGL build can no longer keep the shader language VM: ONEJS_SL_WEB_VM is gone
  • ShaderEffectElement.SetTime sets an effect's clock, and a paused effect draws that frame
  • Value noise, value fBm, voronoi and value fx.noise draw alike on every GPU, each in a different pattern than before
  • The Scaffolding list has a row for every default file the missing-file warning names, templates its list lacks included
  • Restore records what it wrote, so Template newer shows when a template changes
  • The Scaffolding list says Differs for a file it cannot tell you changed, instead of Modified
  • A default file that differs from its template only in line endings reads Up to date
  • Edit-mode preview and Initialize Project name the default files that are missing
  • A new project depends on onejs-unity ^0.5.20
  • Existing projects should bump onejs-unity to ^0.5.20, or shader programs' noise draws the old pattern on WebGL

[2026-09-27] v3.5.1

A default file you delete from a project now stays deleted, and the inspector's lists remove the entry you clicked after an undo. A horizontal slider stays centred beside its label when its height is restyled.

  • Default files are scaffolded once, so a deleted one stays deleted and the Scaffolding list drops its X; Restore brings one back
  • The first Play after upgrading writes, once, any default file a project never had, including one removed with 3.5.0's X
  • The Stylesheets, Preloads, Globals and Cartridges lists' X button removes the entry clicked after an undo, instead of another
  • A horizontal slider's track stays centred when its height is restyled

[2026-09-27] v3.5.0

Shader programs now run as real compiled shaders in every player, native and WebGL, instead of on an interpreter. Bump onejs-react and onejs-unity in an existing project, or its shader programs will not draw in a WebGL build, and commit Assets/OneJS/Recorded.sl.json if you build programs in code.

  • Native players draw shader language programs compiled instead of on the VM
  • A WebGL build of a Package Manager install no longer fails at start with a stripped type
  • A program with no compiled shader in a native player falls back to the VM and warns once, naming its hash
  • Programs built in code are recorded into Assets/OneJS/Recorded.sl.json, which a project commits
  • Shader language programs run compiled on WebGL2 and WebGPU, and the VM no longer runs them in a WebGL player
  • A program's resolution, fragCoord and aspect read the element's real size
  • Shader effects draw the right way up on WebGL2
  • A program texture with nothing bound reads white on every backend
  • WebGL builds leave out the shader language VM
  • A shader program that needs a newer VM is refused with a message instead of drawn wrong
  • sdf takes the fifth and sixth parameters of orientedVesica, roundedBox, orientedBox, triangle, horseshoe and bezier
  • A scalar or float2 toLinear in a shader program draws the same in the editor as in a player
  • toLinear in a shader program runs at full precision on mobile
  • A shader program can assign to a swizzle, and a single number fills a vector
  • A shader program can no longer name a value after a keyword or a type
  • A new project depends on onejs-react ^0.1.59 and onejs-unity ^0.5.16
  • A file can be removed from JSRunner's Scaffolding list, so Play mode stops recreating it
  • Existing projects must bump onejs-react to ^0.1.59 and onejs-unity to ^0.5.16, or shader programs do not draw in a WebGL build

[2026-09-23] v3.4.8

Dialogs and drawers now keep keyboard focus inside them, and preventDefault() in pointer and key handlers now works as it does in a browser, so check any handler that already calls it. New projects start on onejs-play 0.6; older ones stay on their pin until you change it.

  • onFocusIn and onFocusOut fire, and bubble to ancestors
  • FocusScope's focus trap works, so Dialog and Drawer now hold focus
  • preventDefault() on pointerdown keeps focus where it was
  • preventDefault() works in key handlers; a TextField no longer receives a key its onKeyDown prevents, Enter included
  • Two pointer events within one millisecond both reach JS, instead of the second being dropped
  • A new project depends on onejs-play ^0.6.1
  • Older projects can bump onejs-play from ^0.5.5 or ^0.1.1 to ^0.6.1, which builds each physics world once, not twice
  • onejs-play 0.6 removes the stage fits: useStage() returns only { width, height }

[2026-09-22] v3.4.7

OneJS no longer installs Unity's Input System into every project. If you set up a project on 3.4.5 or 3.4.6 and use the Input System, add "com.unity.inputsystem": "1.19.0" to Packages/manifest.json when you upgrade.

  • OneJS no longer installs the Input System; InputBridge needs com.unity.inputsystem in the project
  • A project without the Input System package compiles, whatever its input handling setting
  • preventDefault() works in navigation handlers, and keeps focus in place on a move

[2026-09-21] v3.4.6

With two OneJS apps live at once, an await could hang forever and log nothing about it. A 2D physics world also stops printing a warning per body, and a body's density finally sets its mass.

  • An async C# call resolves in the runner that made it, not whichever ticks first
  • A runner's task backlog no longer delays another runner's completions
  • QuickJSNative.RegisterTask takes the owning context
  • A physics world builds without warnings, instead of a line per body
  • A body's density sets its mass, instead of being ignored
  • Generated CS.* typings hand back the type you passed, so GetComponent(MeshRenderer) is a MeshRenderer

[2026-09-20] v3.4.5

npm install failed in every newly scaffolded app, so Initialize Project left new projects with no dependencies and no bundle. The scaffold pinned an onejs-unity version that no published onejs-play can pair with. OneJS also now installs the Input System it has always required.

  • A new app's npm install resolves, instead of failing on the onejs-unity and onejs-play pins
  • com.unity.inputsystem installs with OneJS, which its runtime assembly already referenced
  • A build processes the scenes it was given, not the Build Settings list
  • A build that ships the open scene gives that app its bundle, instead of none

[2026-09-17] v3.4.4

A player build now finds every OneJS app, including one that ships inside a prefab through Addressables, a Resources/ folder or a plain reference; before this such an app shipped with no bundle and ran OneJS's placeholder instead. Two smaller fixes: JSRunner leaves a UIDocument you added yourself alone, and Initialize Project says why it did nothing rather than reporting success.

  • Every JSRunner in a scene or a prefab is built, so an app that ships through Addressables, Resources or a prefab reference gets its bundle and assets
  • Exclude From Build on JSRunner leaves a runner out of the build, and out of the asset collision check with it
  • An asset path claimed by two apps warns instead of failing the build when a prefab reached either of them
  • Every runner sharing an app gets its bundle, instead of only the first
  • Clearing Panel Settings removes only a UIDocument that JSRunner added itself
  • Initialize Project warns and names the folder instead of reporting success it did not deliver

[2026-09-14] v3.4.3

In a project with more than one OneJS app, a build kept only the last app's assets and silently dropped the rest; that is fixed, and two apps claiming the same asset path now fail the build instead of overwriting each other. The rest is about saying what went wrong: a failed C# call on WebGL throws with the reason, and the type generator writes real array types instead of any.

  • Every app's assets reach a multi-app build, instead of only the last one's
  • A build fails when two apps ship the same asset path, naming both
  • The type generator emits real array types instead of any, and System.TypeLike for a Type parameter
  • A failed C# call throws with the reason on WebGL, where it returned null and said nothing
  • The thrown error names the missing type or member instead of "C# invoke error"

[2026-09-13] v3.4.2

Fixes two Unity 6000.5 bugs: a ScrollView ignored its scroll settings, and styling a TextField's input could stop the whole UI from appearing. The rest is the .sl shader language: shaders written beside the game, running in the editor while you edit them and compiled for a build.

  • Nested C# types resolve by their dotted path: CS.UnityEngine.UIElements.ScrollView.TouchScrollBehavior.Elastic
  • A CS path that names no type warns when used as a value instead of reading as 0
  • A static call skips generic overloads it cannot invoke; UQueryExtensions.Q through the class works on Unity 6000.5
  • interop.bind refuses a generic overload at bind time instead of throwing on every call
  • interop.bind resolves a type by the same rules as the rest of the API, nested types included
  • <ScrollView touchScrollBehavior> and nestedInteractionKind set the value named (onejs-react 0.1.53)
  • <TextField inputStyle> and inputClassName no longer throw during mount on Unity 6000.5 (onejs-react 0.1.53)
  • Native fetch works when the C# request completes at once, as it does for small Android StreamingAssets files
  • A float4 of literals is one instruction and one register, not five and four (onejs-unity 0.5.12)
  • sl.ramp builds each stop as it needs it; a four stop ramp costs 4 registers, not 7 (onejs-unity 0.5.12)
  • A program's textures bind by the name the shader declares (onejs-react 0.1.52, onejs-unity 0.5.12)
  • A .sl import can hand over the file's own text, for showing a shader beside what it draws (onejs-unity 0.5.12)
  • The Play editor reads .sl files: highlighting, errors as you type, completion and hover, from the parser itself
  • An ejected game's .sl files highlight as HLSL in VS Code with nothing installed
  • sl programs read resolution, fragCoord and aspect from the element, not the game window (onejs-unity 0.5.12)
  • .sl files: a shader program in HLSL text, parsing to the program the sl EDSL records (onejs-unity 0.5.12)
  • import plasma from "./plasma.sl": encoded at build time, with a .d.ts and a shader manifest beside the bundle (onejs-unity 0.5.12)
  • An ejected Play game compiles its shaders from the first frame (onejs-play 0.5.2)
  • A uniform's declared default reaches the interpreter, not just the compiled shader (onejs-react 0.1.52, onejs-unity 0.5.12)
  • <ShaderProgram> checks uniform names against the program it was given (onejs-react 0.1.52)
  • sl.cross, sl.reflect and sl.remap added (onejs-unity 0.5.12)
  • sl select, lerp, step, smoothstep and clamp take their width from the widest operand (onejs-unity 0.5.12)
  • Shader programs interpreted in the editor are recorded and compiled on the next tick; an ejected game runs compiled from its second frame with no manifest written by hand (onejs-unity 0.5.11, onejs-react 0.1.51)
  • Generated shaders copy every include SLCommon reaches, so they no longer compile to magenta since noise landed

[2026-09-07] v3.4.1

  • A Color read from C# has r, g, b and a in JS, on every path
  • A zero-alloc binding can return a string, a data struct or an object; native libraries rebuilt
  • fx colours are sRGB as written; gradients and ramps interpolate in sRGB and convert to linear (onejs-unity 0.5.7)
  • fx noise type: "turbulence" is real turbulence (sum of absolute octaves) and "ridged" is new (onejs-unity 0.5.9)
  • sl noise shares fx's fields: sl.simplex is real simplex, sl.fbm takes a base, sl.turbulence and sl.ridged added (onejs-unity 0.5.10)
  • sl.ramp mixes its stops in sRGB and converts once; sl.color and sl.toLinear added, with a TO_LINEAR opcode in both backends (onejs-unity 0.5.8)
  • Pointer and mouse events carry localX/localY, relative to the element the handler is on
  • backgroundImage and the fx and asset hooks share an opaque Texture type instead of unknown (onejs-react 0.1.48, onejs-unity 0.5.1)
  • fx.useAnimatedTexture draws with the latest render's build function each frame (onejs-unity 0.5.1)
  • fx ramps and gradients take hex strings, bare colour lists and readonly arrays (onejs-unity 0.5.2)
  • fx noise takes scroll, panned by the animated build's clock (onejs-unity 0.5.2)
  • fx.useImage builds synchronously and never returns null (onejs-unity 0.5.2)
  • fx: threshold(low, high), gradient directions by word, a turbulence noise preset, and alpha on a stop (onejs-unity 0.5.5)
  • fx.canvas(size) bakes the size into the sources; useAnimatedTexture takes one (onejs-unity 0.5.6)
  • Physics bodies are handles: world.bodies[i].enabled, moveTo, setVelocity, push (onejs-unity 0.5.6)
  • Painter colours take a hex string, and circle(x, y, r) joins the path methods (onejs-react 0.1.50)
  • Slider takes min and max (onejs-react 0.1.50)
  • Particle emitters read glow, spin and position; the old names remain (onejs-react 0.1.50)
  • oj's audio.load takes a file name like the texture loaders (onejs-play 0.4.5)
  • A non-zero letterSpacing switches the element to the Standard text generator, so a content-sized spaced line no longer wraps its last glyph
  • The egg shape takes h, r, rTop and bulge, Quilez's four parameter egg, in fx, sl and TextureFX
  • ShaderProgram warns once about a uniform name the program never declared (onejs-react 0.1.48)
  • ScreenProvider takes a size so a host can drive breakpoints from its own box (onejs-react 0.1.48)
  • InputBridge.GetKeyDown/GetKeyDownById are deprecated for GetKeyHeld/GetKeyHeldById; the old names keep their behavior and warn
  • TextField: inputClassName and inputStyle style the inner input (onejs-react 0.1.46)
  • Tailwind: opt-in preflight strips the runtime theme's control chrome (onejs-unity 0.3.1)
  • The build validation test assembly no longer ships in player builds

[2026-08-28] v3.4.0

  • An unknown style key warns once instead of being dropped silently
  • A USS declaration UI Toolkit will ignore logs a warning naming it and its line
  • AI Skills ship at AI/Skills/, discovered by Unity's AI Assistant
  • Tools > OneJS > Install AI Skills copies them where terminal agents look
  • An image that downloads but Unity cannot decode says so, instead of a generic failure
  • WebGL: trackpad scrolling advances every frame instead of lurching every few
  • WebGL: a small trackpad nudge scrolls instead of doing nothing
  • WebGL: globalThis.__ojWheelNotch tunes wheel granularity at runtime; a ScrollView's step follows it

[2026-08-26] v3.3.0

  • fx: a GPU image pipeline with noise, gradients, 42 signed distance shapes, color adjustments, 27 blend modes, spatial moves and neighbour filters
  • fx: a whole chain crosses to C# once, and its per-pixel steps fuse into one blit
  • fx: a chain can render into a target the caller keeps, for animation
  • console.warn and console.error log at Unity's warning and error levels instead of all arriving as Debug.Log
  • A JS Error keeps its message when it is logged
  • Synthetic events are built only when a handler asks for one
  • WebGL: trackpad scrolling covers the same distance as a mouse wheel instead of many times more
  • Tailwind: utility rules emit in the web's cascade order instead of file scan order
  • Tailwind: flex sets row, block sets column
  • Tailwind: flex-1 includes flex-basis: 0
  • Structs: read-only properties are visible from JS
  • Structs: a property and a field that differ only by case are both kept
  • Structs: a property that throws no longer loses the rest of the struct

[2026-08-24] v3.2.4

  • macOS: the native library is a universal binary, so Intel slices of Universal player builds no longer fail to load
  • macOS: the library targets macOS 11.0 instead of whichever SDK built it

[2026-08-24] v3.2.3

  • New projects scaffold with oj available: the onejs-play dependency, the esbuild alias and the tsconfig path

[2026-08-23] v3.2.2

  • Windows: the native library no longer imports libwinpthread-1.dll, which broke every 3.2.0/3.2.1 Windows project with DllNotFoundException: quickjs_unity
  • CI verifies every shipped native plugin depends only on OS-provided libraries

[2026-08-23] v3.2.1

  • 2D physics: PhysicsWorld2D runs a C#-owned rigidbody world for UI elements
  • Audio: AudioBridge plays clips through Unity instead of WebAudio
  • The Input System package is now optional; InputBridge compiles only when it is installed
  • The package declares the engine modules it needs
  • WebGL: particles, physics and shader effects tick in builds
  • WebGL: completed C# Tasks settle their JS promises, so audio.load and remote <Image src> resolve
  • PhysicsWorld2D.SetPosition moves a body that is not simulating
  • Proc/MeshGenerator compiles into the runtime assembly

[2026-08-20] v3.2.0

  • GetJSFunction<TDelegate>() on JSRunner, QuickJSUIBridge, and QuickJSContext binds a named JS function to a typed C# delegate
  • JS functions assigned to C# Func delegates now marshal their return values (all arities up to 4)
  • JSRunner.Reloaded event fires after each hot reload
  • Callback handles are generation-tagged; a handle from a destroyed context fails loudly instead of invoking the wrong function
  • JS arrays returned to C# marshal as arrays instead of null
  • Native library and C# runtime verify a shared ABI version at startup
  • Fixed native buffer leaks and a Windows allocator mismatch in callback result marshaling

[2026-08-17] v3.1.6

  • WebGL: scheduler clock seeds from performance.now(), so timers created during boot fire at their real due times
  • WebGL: a re-evaluated bootstrap retires the previous generation's timers and always captures the true browser natives
  • WebGL: context teardown is refcounted and leaves the page pristine when nothing was migrated
  • clearTimeout/clearInterval fall through to the browser for timers created before OneJS booted

[2026-08-17] v3.1.5

  • WebGL: unityInstance.Quit() no longer hangs the page; teardown returns captured timers to the browser
  • WebGL: JS to C# calls after context destruction are ignored
  • Zero-delay timeout chains and interval backlogs no longer stall a frame

[2026-08-14] v3.1.4

  • Cartridges extract as soon as they are assigned; the Cartridges tab warns when onejs-ui is missing from package.json
  • import "onejs:themes" registers every extracted cartridge theme (onejs-unity 0.2.19, wired in scaffolded configs)

[2026-08-14] v3.1.3

  • Added AbortController/AbortSignal polyfills (fetch does not observe signals yet)
  • Extension methods now accept omitted trailing optional arguments (element.Q(name) works)

[2026-08-14] v3.1.2

  • Added TreeViewBridge, pairing with onejs-react 0.1.43's <TreeView> component and ListView selection fixes
  • Cartridges can declare a version; the Cartridges tab flags outdated extractions
  • New projects scaffold with onejs-ui in package.json

[2026-08-06] v3.1.1

  • Fixed legacy Input Manager compile break: FastPath's UnityEngine.Input registrations resolved against the new OneJS.Input namespace in projects with the legacy input manager enabled
  • Added GitHub CI: EditMode + PlayMode suites on every push and PR

[2026-08-06] v3.1.0: OneJS V3 🥳🎉

Major Changes

  • Replaced Puerts with a purpose-built QuickJS integration: no third-party engine layer, smaller footprint, works everywhere JIT is prohibited, including iOS
  • WebGL builds now run on the browser's own JS engine (V8/SpiderMonkey) for full JIT performance
  • React 19 is the core UI model: a custom reconciler renders JSX directly to UI Toolkit elements, no DOM, no webview
  • New JSRunner component replaces ScriptEngine: PanelSettings as the project marker, one-click Initialize Project scaffolding
  • Edit-mode preview: your React UI renders in the Game view without ever entering Play mode

New Features

  • Hot reload in both edit and play mode, with onPlay/onStop lifecycle hooks and automatic cleanup of JS-created objects
  • JSPad: a second MonoBehaviour with an inline code editor for instant prototyping, no project setup
  • Built-in Tailwind-style JIT utility generator and CSS Modules, both embedded in the bundle (no external dependencies)
  • ES6 imports of C# namespaces: import { Vector3 } from "UnityEngine"
  • Zero-alloc C# interop: FastPath accessors, pre-registered bindings, batched style and vector-drawing commands
  • 2D particle engine and GPU compute bridge rendering inside UI Toolkit elements
  • Web APIs out of the box: fetch, WebSocket, localStorage, URL, base64, timers
  • UICartridge content packs: drop a single asset onto a JSRunner to install themes and effects
  • onejs-ui: a themeable React component library with premade themes (Pixel, Kawaii, Sketch)
  • AI-native development via the Unity MCP Server companion package

Workflow Improvements

  • Scene Folder workflow: each app lives next to its scene in a git-friendly folder, tilde-suffixed so Unity ignores sources
  • The editor manages the esbuild watcher automatically: save a file, the UI hot-reloads
  • unity-types npm package ships generated TypeScript definitions for the whole CS.* surface
  • The full JS side verifies from the CLI (npm run build / typecheck), no editor needed

Other Enhancements

  • All core types now live under the OneJS namespace (with backward-compatible resolution for older bundles)
  • Built-in stability monitoring: handle-table and async-task-queue leak detection with automatic warnings
  • Player builds embed the JS bundle automatically, nothing passes through StreamingAssets

[2026-04-09] v2.3.5

  • Added Android 16KB page size alignment support
  • Fixed WebGL libpuerts.a meta file
  • Updated Linux (x86_64) libpuerts.so

[2026-02-11] v2.3.4

  • Fixed memory leaks in Resource (added caching for images, fonts, and font definitions)
  • Fixed Document.clearCache() not destroying cached Texture2D objects (GPU memory leak)
  • CoroutineUtil Instance fix
  • WebGL PuerTS tweak for Unity 6.3 (robust WASM table lookup, updateMemoryViews hook)

[2025-11-30] v2.3.3: Bug Fixes

  • Make Sample code to use "PhysicMaterial" for pre Unity 6 versions
  • Guard Coroutine Eval in Runner

[2025-11-28] v2.3.2: Minor Fixes

  • Fixed ExCSS.Unity issue on Unity 2022.3
  • Fixed WebGL Playmode issue with document not being set

[2025-11-17] v2.3.1

  • Fixed regressions in Unity 6.3 Runtime USS where UnityEditor namespaces were still referenced in runtime code.

[2025-10-20] v2.3.0: Updated for Unity 6.3

SVG support and uss filters are now built-in!

  • Runtime USS rework for Unity 6.3 compat
  • Sample Scene updated for Unity 6.3 (added svg loading and filter usage)
  • Improved float parsing in DomStyle (culture-agnostic)

[2025-10-05] v2.2.7

  • Puerts filepath handling with spaces
  • CI Mac shell fix
  • Added ScriptEngine.Refresh()
  • More webgl build tweaks
  • Tighter GetLength() in DomStyle

[2025-07-27] v2.2.5

  • SimpleGrid bugfix
  • Game UIs CI test
  • DomStyle caching

[2025-06-29] v2.2.4

  • CultureInfo.InvariantCulture for Length parsing
  • EditorScriptEngine updates

[2025-06-04] v2.2.3

  • Added tick Error handling event to ScriptEngine and EngineHost

[2025-05-28] v2.2.2: Misc Improvements

  • Delayed EvalFile(). This ensures the inital mounting happens after the initial UIDocument load (so that the initial layouts are already calculated).
  • Added an extra ".root" css specificity to generated TW classes.

[2025-05-21] v2.2.1: Game UIs

Improved some workflows to support the rollout of our game UIs.

To upgrade from a previous version:

  • make sure to update onejs-core and onejs-preact to ^2.0.0
  • The following defaults have changed:
    • postcss.config.js, tailwind.config.js, tsconfig.json
    • input.css, .vscode/tasks.json
  • You can delete them and run scene with ScriptEngine again (be mindful if you have custom changes)

To install OneJS's Game UIs, you can now run:

```bash
npx oj add all
```

This will work as long as you have a premade-uis.tgz(.bytes) file anywhere in your Assets/ folder. This file is only included in the OneJS Asset Store package.

[2025-04-14] v2.1.15

  • Debugger Support options on ScriptEngine
  • WebApi to support headers
  • 2xl -> xxl so we don't run into char escaping issues

[2025-03-12] v2.1.14: Minor Tweaks

[2025-03-10] v2.1.13: Bugfixes and Improvements

onejs/math is now available! See onejs-core repo for more info.

  • Better custom UIElement Events handling
  • Normalized Path in ScriptEngine.GetFullPath()
  • EngineHost.subscribe() improvements
  • Better uss class name escaping
  • Many Editor UI improvements

[2025-01-23] v2.1.9: Improvements to Bundler and DTSGen

  • Many updates on the npm modules (onejs-core, onejs-preact, onejs-comps, etc)
  • Backends MenuItems
  • Removed BaseEditor override
  • Bundler rewrite
  • DTSGen improvements
  • 2021.3 compatibility
  • Fixed puerts reimporting issue
  • Various EditorScriptEngine improvements
  • Use "Assembly-CSharp" by default for DTSGenerator
  • EditorEngineHost refactor
  • Codegen: accomodate for Nullable types
  • EngineHost Refactor

[2024-12-08] v2.1.7: Minor Tweak

  • Added a global.d.ts by default

[2024-12-02] v2.1.6: Preparation for Editor UI

We’re releasing this now, ahead of the Editor UI update (expected in a couple of weeks), as it includes significant improvements and bug fixes that are worth rolling out early.

If you are updating an existing project, make sure to also bump the onejs-core package to ^1.0.6 in your package.json.

  • Added WebApi from V1
  • requestAnimationFrame() bugfix (Thx @Kodra)
  • DomStyle.GetLength() bugfix
  • Use min/max for gradientrect
  • Added support for global namespace in DTSGenerator
  • onejs-core dependency bumped to ^1.0.6
  • Many more bugfixes and improvements in onejs-core and onejs-preact

(Most of the Editor UI code are actually in. However, we'll use the next release to get into the details.)

[2024-10-01] v2.0.26: OneJS V2 🥳🎉

Major Changes

  • Switched from Jint to Puerts as the JavaScript engine

    • Provides 3 backends: QuickJS, V8, and NodeJS
    • Significantly improved performance (20x to 100x faster)
    • Better memory management with static wrappers and blittable optimizations
  • Adopted ESBuild workflow

    • Bundles everything into a single file for easier deployment
    • Automatic handling of node modules
    • Experimental support for Custom Editor/Inspector UI

New Features

  • Support for node modules and npm packages
  • Improved TypeScript definition generation
  • Experimental Custom Editor UI support

Workflow Improvements

  • Quick backend switching with npm run switch
  • Enhanced interoperability between C# and JavaScript

Other Enhancements

  • Updated ScriptEngine component with new interop settings
  • Streamlined global variable exposure from C# to JavaScript
  • Improved overall stability and performance

OneJS V1 ChangeLogs below

[2024-07-08] v1.6.13: Preact 10.21

  • Updated Preact to 10.21
  • CultureInfo.InvariantCulture fix for HexMatchToRgba()
  • Add AddRuntime* APIs for ScriptEngine

[2024-02-08] v1.6.10: Bugfixes and Improvements

OneJS V2 is coming! Get in our Discord server and private repo to follow the progress.

  • Changed ScriptEngine's LateUpdate() to Update() to fix Task resolution error
  • DPIAdjuster improvements
  • Added checkEquality option to EventfulPropertyAttribute
  • Exposed EngineHost on ScriptEngine
  • Tailwind 4-comp hex color fix
  • ScriptEngine OnEnable & OnDisable support
  • useCapture support for addEventListener and removeEventListener
  • Global host and interop objects with event subscription function (#12)
  • Improved CommonJS path resolver (#11)

[2023-10-22] v1.6.8

  • Cyclic error fix for preact falsey check in Hookstate
  • TSDefConverter moved to using UI Toolkit instead of IMGUI (credit to @iDevelopThings)
  • Various Jint tweaks (RunAvailableContinuations & UnwrapIfPromise)
  • Updated Jint with rest/spread bug fix
  • Fixed the # char bug for TW classes
  • Added _includeOverriddenMembers for TSDefConverter
  • Fixed OpenDir for Linux

[2023-09-09] v1.6.7

  • Auto-reimport uss after generation (Tailwind)
  • useEventfulState() forceUpdate() regression fix

[2023-08-31] v1.6.6: Stability and Misc Additions

  • Updated Jint to [beta-2050]
  • jsx-runtime support
  • OnPreprocessBuild now accommodates when there's no scene listed in the build settings
  • Added comps sample scene
  • Added GradientTextureFill Job example
  • Added onEngineDestroy
  • Added webapi.getImage()
  • Added OnInitOptions to ScriptEngine
  • Dom.addEventListener now go through all loaded assemblies
  • Fixed regression in InitAllUIElementEvents()
  • Added TagTypeResolver to ScriptEngine
  • JSON module import
  • Added default tasks.json for vscode
  • Added EventfulPropertyAttribute and corresponding source generator
  • Added ValueTuple check in TSDefConverter

[2023-07-03] v1.6.4: Comp Library and More

  • Added a new Component Library under ScriptLib/onejs/comps. These are inspired by HeadlessUI.
    • Please see the v1.6 Docs for more information.
  • ScriptLib folder now will contain the .ts files. This is to make it easier to refer to the TS implementation instead of the compiled JS.

[2023-05-30] v1.6.1: Major Tailwind Rework

[2023-04-23] v1.5.9: Quite a bit of QoL stuff, Tweaks, and Bugfixes

  • Added more CLR exception handling logging

  • VisualElementExts ForceUpdate()

  • Preact <-> Jint Cyclic ref error fix

  • Added array type mapping for TSDefConverter

  • Added public properties for ScriptEngine option fields

  • Added _logRedundantErrors to ScriptEngine

  • BuildProcessor bugfix for Cloudbuild @mattehr

  • Improved addEventListener and removeEventListener to allow multiple callbacks on the same event

  • Jint Engine tweak: MemberNameComparer = StringComparer.Ordinal

  • Color processor fix

  • More fields added to Image tag (jsx def)

  • Added unitySliceScale support (new in Unity 2022.2)

  • [StyleProcessor] Check for all falsy values instead of just null

  • forceUpdate() in useEventfulState

  • Added ref support for styled comp

  • Added memo to preact/compat

[2023-03-04] v1.5.7: Minor Tweaks and Bugfixes

  • Better VectorAPI version check
  • .boxedValue alternative (for Unity 2021.3)
  • Auto-create directory for player workingDir

[2023-02-18] v1.5.5: Internal Code Improvements

Online documentation was revamped! Check it out at https://onejs.com/ There is now a new comprehensive Tutorial101.

  • Cloud Build support (some internal changes to Bundler)
  • Runtime USS errors are now properly handled (No longer need to reload scene)
  • Offline Doumentation.pdf revamped
  • Many minior tweaks and bugfixes

[2023-01-26] v1.5.1: Getting ready for VanillaBox

  • New custom Editors for ScriptEngine, Bundler, and LiveReload. Removed dependency on NaughtyAttributes.
  • Some internal changes done to support the launch of VanillaBox
  • Removed lib.dom.d.ts from the default Typescript typings
  • Made WorkingDir more configurable per ScriptEngine. This also makes having multiple ScriptEngines easier.
  • Replaced FrontLoader and ImageLoader with the resource global variable
  • Moved OneJSBuildProcessor functionality to Bundler
  • Removed Extract ScriptLib On Start option as this is replaced by the ScriptsBundle

[2023-01-04] v1.4.5 Misc

  • TSDefConverter now supports Jint syntax for events ("add_" and "remove_").
  • Added a new Sample (CharManSample)

[2022-12-25] v1.4.4 Misc

  • Bugfix for clearInterval() not working inside the queued action
  • classnames added
  • VectorAPI check for sample scene

[2022-12-15] v1.4.3 Built-in Styled Components and Emotion APIs

  • Implemented onejs/styled which includes both styled-components and emotion APIs.
  • backgroundImage Style prop now also accepts Sprite objects in addition to string paths and Texture objects.
  • Reverted default Trickledown.
  • ScriptEngine.Objects list will now accept any UnityEngine.Object, not just MonoBehaviours.

[2022-11-08] v1.3.5: useEventfulState()

  • Implemented useEventfulState()
  • Fixed inconsistent timing between performance.now() and requestAnimationFrame()
  • Keep existing unity-* classnames intact for stock controls
  • Added IsByRef check in TSDef Converter
  • Updated Preact Signals to latest version
  • Path Resolver tweak

[2022-10-13] v1.3.3a: Bundler Changes

  • Added user-defined sub-directories for the bundler to ignore during runtime updates

[2022-10-08] v1.3.3: Async/await support

  • Async/await are now supported in OneJS scripts

  • Preact Signals are also now fully supported

  • Changed QueuedActions to use PriorityQueue

  • Added RadioButton and RadioButtonGroup TS Defs and sample usage

  • Fixed issue with relative path loading same modules more than once

  • Fixed OneJSBuildProcessor+OnPreprocessBuild _ignoreList issue

  • NetSync: Have Server also Broadcast

  • Tailwind ParseColor bugfix @LordXyroz

[2022-09-15] v1.3.1a: ExCSS.Unity fix

  • Patched ExCSS.Unity.dll so it doesn't cause conflicts with other Unity packages

[2022-09-13] v1.3.1: Minor Bug Fixes

  • Fixed turning Live Reload off for Standalone builds
  • Add Navigation Events to the TS definitions
  • Better UglifyJS error handling
  • Adds support for chaining pseudo selectors @Walrusking16
  • Tag lookup fix, Dom compliance and ListView example @Sciumo

[2022-09-01] v1.3.0: Runtime CSS

You are now able to load CSS strings at runtime via document.addRuntimeCSS(). See https://onejs.com/runtimecss for more information.

  • Runtime CSS
  • Updated Jint to latest
  • Copy to Clipboard for TSDefConverter (credit to @Sciumo)
  • Added node_modules to JSPathResolver
  • _engine.ResetConstraints() in Update Loop
  • Action queues without coroutines
  • setInterval

[2022-07-10] v1.2.1: Minor features and bugfixes

  • Implemented onValueChanged for UI Toolkit controls
  • Fixed __listeners Linux slowdown
  • GameObject Extensions AddComp(), GetComp(), and FindType() fixes
  • UIElementsNativeModule handling for 2022.2 and later

[2022-06-24] v1.2.0: WorkingDir Rework

You are now able to keep all your scripts under {ProjectDir}/OneJS. And the scripts will be automatically bundled into{persistentDataPath}/OneJS for Standalone builds.

  • Added a Bundler component that is responsible for extracting scripts.
  • Added OneJSBuildProcessor ScriptableObject that is responsible for packaging scripts (for Standalone builds).
    • This is generally automatic as it uses OnPreprocessBuild
    • It also provides glob ignore patterns for things you don't want to include in the bundle.
  • Added [DefaultExecutionOrder] for various components.
  • Added an extra option (Poll Standalone Screen) on the Tailwind component to allow you to also watch for screen changes for standalone builds.

[2022-06-19] v1.1.2: Bugfixes

  • Fixed various preact cyclic reference errors
  • Fixed preact diff bug (missing parentNode)
  • Fixed Tailwind StyleScale regression in 2021.3

[2022-06-08] v1.1.1: Flipbook and more Tailwind support

Newly Added:

  • Flipbook Visual Element
  • Negative value support for Tailwind

Minor Bug fixes:

  • Opacity bugfix
  • Preact useContext bugfix
  • Preact nested children bugfix

[2022-05-26] v1.1.0: Tailwind and Multi-Device Live Reload

New Features:

  • Tailwind
  • Multi-Device Live Reload
  • USS transition support in JSX

Other Notables:

  • Completely reworked Live Reload's File watching mechanism to conserve more CPU cycles. Previously it was using FileSystemWatcher (poor performance when watching directories recursively).
  • New GradientRect control (allows linear gradients with 4 corners, demo'ed in the fortnite ui sample)

Minor Bug fixes:

  • Fixed Double to Single casting error during Dom.setAttribute
  • Fixed object[] casting during Dom.setAttribute
  • Fixed unityTextAlign style Enum bug
  • Fixed overflow style Enum bug
  • Fixed a bunch of setStyleList bugs

[2022-05-16] v1.0.0: Initial Release

  • Full Preact Integration with 1-to-1 interop with UI Toolkit
  • Live Reload
  • C# to TS Def converter