NX CreativeNX CreativeDocs
Scriptsnx_write

Changelog

Version history for nx_write.

1.5.0 (2026-08-23)

Performance

Writing sessions used to resend the whole page to every nearby player several times a second. They no longer do.

  • A session with nobody nearby sends nothing at all. When someone walks up they get one full copy, then only the strokes that follow. Each stroke costs a few hundred bytes instead of a few hundred kilobytes.
  • Full pages go out on a page turn, a clear, a tear, or after a few seconds of stillness.
  • Stroke data is around 24 times smaller, on disk and over the wire. Existing documents convert on their next save. The database schema does not change.
  • Opening a note takes one request instead of five, and the response no longer carries the note's preview image.
  • A placed note that fails to render gives up after three attempts and waits before trying again, instead of hammering the same call.

Added

  • RegisterPaperKind, on client and server. Another resource can add its own writable paper at runtime. A registered kind inherits the post-it's hold pose, pen and hand IK, so it tracks future post-it tuning instead of a frozen copy. See Exports.
  • Server export GetDocumentPreview. Read a saved document's preview image and render the ink outside nx_write, on your own prop or in your own UI.
  • Open accepts a background image drawn under the writing surface. Registered kinds set the box it fills with background.box.

Changed

  • Ink width follows pen speed, and strokes taper at both ends.
  • Saved previews are rendered at the size a placed note actually draws at, so they read sharper on the wall.

Fixed

  • Heavy notepads could fail to save with a serialization error. Preview images are now size-budgeted, and every page of a loaded document is compacted rather than only the pages the writer visited.
  • Ink no longer shifts when the pen lifts. What you see while drawing is what gets saved and what everyone else sees.
  • The stroke limit is enforced while writing, with a "Notepad full" hint, instead of failing at save time.

1.4.0 (2026-08-06)

Performance

The placed-note renderer was rebuilt. The savings scale with how many notes are around, so note walls and busy offices gain the most.

  • Shared note surfaces. Notes of the same paper type now draw from one shared surface instead of one each. Fifteen placed post-its went from fifteen surfaces down to one, a 93% cut. Bringing a note into range swaps an image rather than starting a new surface, so the roughly 1.5 second blank delay on approach is gone.
  • Notes you are not looking at are free. Off-screen notes used to draw every frame at full price. They are now skipped entirely, so turning away from a wall of notes drops most of its cost and walking out of range drops all of it.
  • Half the draw calls per note. A note's position is also worked out once when it comes into range instead of every frame.

1.3.0 (2026-08-04)

Added

  • Page tear. Hold the tear button in freehand mode to rip the current page out. It crumples in the hand and gets flicked away as a paper ball everyone nearby can see. Pages behind shift forward like a real pad.
  • Post-its tear too. The pad resets to a blank sheet and the item is not consumed.
  • Handwriting size. The "aA" button cycles Normal, Large and Huge. The size sticks to the document and shows on the placed note.
  • Config.Voice. Push-to-talk now works while writing, in text and freehand mode. typingKeys picks which keys open the mic while typing.

Changed

  • A saved notepad reopens on the page it was left on.

Fixed

  • Esc no longer opens the pause menu when you close a note in freehand mode.
  • Long words with no spaces used to run off the edge of a saved preview or placed note as one row. They now wrap the way they do on the live page.

1.2.0 (2026-06-14)

Added

  • Client export CreatePlacement: create a placement at explicit coords and rotation, skipping the aim preview. The hook for custom positioning tooling (transform gizmos, snapping, free-rotate). Accepts a live entity, a quaternion, or a GTA-euler rotation for the pose.
  • Client export RefreshPlacements: re-pull placements from the server and render any not held locally. Useful after writing to nx_write_placements out of band.
  • Server export CreatePlacement: the trusted, server-authored mirror of the client export. Skips the rate-limit and distance gate, since the server supplies the coords.

1.1.0 (2026-06-10)

Added

  • Custom inventory support via Config.Inventory (auto / ox / custom).
  • Client exports: Open, Place, Close, IsBusy.
  • Server export: Open.
  • Server events: nx_write:documentSaved, nx_write:placementCreated, nx_write:placementPickedUp.

Changed

  • Config.PostitPickupMode adds 'both' (offer Remove and Pick up in one menu).

1.0.1 (2026-06-07)

Fixed an export-related update mismatch; requires downloading the latest version of nx-3d.

1.0.0 (2026-06-06)

Initial documentation.

NX Docs