[{"data":1,"prerenderedAt":1520},["ShallowReactive",2],{"releases":3,"mdc--xj4u94-key":89,"mdc--7ii9tl-key":225,"mdc--c6rcau-key":278,"mdc--92gs72-key":632,"mdc--p0lcjx-key":718,"mdc-wz47nq-key":767,"mdc--ewmcrw-key":828,"mdc--x3a8cw-key":915,"mdc-4oy49p-key":953,"mdc-v47coj-key":969,"mdc-nbd9z3-key":1025,"mdc--9r50dc-key":1051,"mdc-qaks5c-key":1099,"mdc--11b5hx-key":1172,"mdc-kvxt0k-key":1205,"mdc-uvv58-key":1293,"mdc--eb2jk2-key":1336,"mdc--iuu8ru-key":1374,"mdc-etvu5u-key":1432},{"id":4,"extension":5,"meta":6,"releases":7,"stem":87,"__hash__":88},"releases\u002Freleases.yml","yml",{},[8,13,17,22,26,30,34,38,42,47,50,54,58,62,66,70,74,78,82],{"title":9,"date":10,"badge":11,"description":12},"udServer 1.16.0","2026-08-19","Minor Release","### Features\n\n- New organisations are now created from an organisation type: **collaborative** (the built-in defaults), **managed** (view-only defaults plus starter roles) or **blank** (no permissions at all), so a new organisation starts with the access model it actually wants.\n- A scene published for preview can now be opened from its share code alone, with no account and no license of the viewer's own. Publishing a preview link requires the Scene Share permission and a Studio license; withdrawing one requires only the permission, so an expired license can never strand a link that is already out.\n- The udStream web viewer is now packaged with the server, so a deployment serves its own viewer and signs in against the server hosting it rather than udCloud. Bundled viewer build is udStream 1.9.3.\n- Collaborative scene editing is markedly faster and more reliable. Scene changes are now ordered by a per-scene edit sequence and served from an in-memory queue, so an edit can no longer be skipped over while its write is still in flight, and a viewer's presence no longer writes a database row on every poll. A drag now reaches storage as the position it settled on instead of as every frame of it.\n- WebSocket connections now close with a reason code rather than a bare disconnect, so a client can tell a rejected sign-in from a dropped network and stop retrying. A slow or stalled client no longer holds up traffic for everyone else, and a session is limited to a small number of simultaneous connections as a backstop against a reconnect loop.\n- Updated the user guide.\n\n### Bug Fixes\n\n- Fixed sessions licensed by email domain always being treated as udStream Studio regardless of the tier their domain entry actually grants.\n- Improved handling of udSDK signatures to better support older udSDK builds\n- Fixed a failed restore being able to leave the database committed and half-migrated, and then handing it back to traffic. A restore now either lands whole or leaves nothing behind, and the server holds maintenance mode if it cannot confirm the database survived.\n- Fixed scene edits being held in memory until shutdown when a write failed and the server then went quiet.\n- Fixed memory leaks when approving an SDK key and when changing a session's user.\n- Fixed the scene viewer page showing a login box in states where it did not apply.\n- Updated localisations.\n\n### Upgrade Notes\n\n- The database is migrated from v227 to **v232** on first start. Take a backup before upgrading.\n",{"title":14,"date":15,"badge":11,"description":16},"udServer 1.15.1","2026-08-10","### Features\n\n- Egress usage now breaks down three ways instead of one — by category, by project (organisation view) or organisation (server admin view), and by user — making it clearer where outbound traffic is coming from. Seeing a user's name and email alongside their volume requires the User List permission.\n- Images and screenshots can now be pasted or dropped straight onto a work item as it is created.\n- Work items now open on the kanban board by default.\n- The login page now explains that signing in creates the account, as there is no separate sign-up step.\n\n### Bug Fixes\n\n- Fixed the admin pages reformatting a server or issued license when displaying it, which invalidated its signature.\n- Fixed email unsubscribe pages not being shown in the recipient's preferred language.\n- Fixed the project files list being narrower than its panel, which clipped ordinary-length filenames.\n",{"title":18,"date":19,"badge":20,"description":21},"udServer 1.15.0","2026-08-09","Major Release","### Features\n\n- Added **user licensing**, managed by organisations rather than admins.\n  - Licenses are issued as tiers (**udSDK Basic**, **udStream Analyst**, **udStream Studio**) with optional **SolidScan** and **Strategic** add-ons.\n  - Each organisation has a seat allocation ledger, and administrators can assign, revoke and review licenses per user.\n  - Seats can be purchased for an organisation directly through **Stripe** checkout, with several products bought in a single transaction.\n  - A scene can grant a view-only **Previewer** license, so somebody can open a shared scene without holding a license of their own.\n  - Added an organisation activity log, per-domain license tiers, and a phase-out report for legacy domain licensing.\n  - Server administrators can manage any organisation's licenses from the admin organisations page.\n- udServer can now act as a **license issuer**. The standalone udLicenseServer has been folded in: a server whose license carries an issuer key can register downstream servers and mint their licenses from the new **License Issuer** admin page.\n- Added native **backups** without having to touch pg directly. An administrator can take a full server backup and restore from one, with the server held in maintenance mode while a restore runs.\n- Added **work items** — per-project tasks and QA items with states, tags, comments, an edit history, and a drag-and-drop board.\n- Added a **WebSocket API**. Scene updates are now pushed event-driven per scene instead of polled, which takes most of the latency out of collaborative editing.\n- Added **email support**: a proper SMTP transport, a persistent send queue, localised content, per-user notification preferences, and bounce suppression. Organisation invitations, cancellations, acceptances, member removals and role changes all send mail.\n- Organisations can now be joined without one-at-a-time invitations:\n  - Organisations can claim **email domains**, so colleagues find and join on their own. Claiming a domain requires an address on it, and public webmail providers are blocked server-wide.\n  - Added reusable, revocable **invite links** with optional expiry and use limits.\n  - Requests to join can require approval, and appear alongside invites on the members page.\n  - Added the **Manage Joining** organisation permission, and a **Blocked joining domains** server setting.\n- Added **project and organisation deletion**, with a retention period before the data is swept and purged.\n- Added **egress logging**: outbound bytes are recorded per request against a category, with usage reporting for both organisation administrators and server administrators.\n- Projects can now keep files on a **local or network-mounted drive**, gated by a server-wide allowed storage root.\n- Added better support for running **behind a reverse proxy**, so the real client address is used.\n- Added **legal documents**: a deployment can publish its privacy policy, terms of service and subprocessor list, each either served by the server or linked out to an external URL.\n- Scenes can now be created directly from the portal.\n- A web UI consistency pass: navigation sync, a copy sweep, permission-aware controls that hide actions that would fail, and numerous small UX fixes.\n\n### Bug Fixes\n\n- Fixed accepting an organisation invitation reporting a server fault: the user was added but their roles were never applied and the invitation was left behind.\n- Fixed a login rejected because the account is disabled reporting a generic failure instead of the real reason.\n- Fixed several scene synchronisation issues, including changes being missed when a scene's change window closed early.\n- Fixed memory leaks in server configuration handling and in backups.\n- Fixed permission strings being too short to hold the full permission set.\n\n### Upgrade Notes\n\n- The database is migrated from v214 to **v227** on first start. Take a backup before upgrading.\n- `udLicenseServer` is no longer built or shipped; udServer performs that role now.\n",{"title":23,"date":24,"badge":11,"description":25},"udServer 1.14.0","2026-07-05","### Features\n\n- Added **file previews** for images and videos directly in the web UI.\n- Projects can now **redirect file downloads (HTTP 302)** directly to their S3 \u002F Azure Blob Storage, reducing load on the server.\n- The File API now reports **MIME types** for files.\n- Improved the upload experience, with cleaner folder uploads.\n- Added web server **queue statistics** and a server load chart to the admin pages.\n- Added a **system requirements** page to the admin documentation.\n\n### Bug Fixes\n\n- Fixed issues forwarding partial content (HTTP 206) responses.\n",{"title":27,"date":28,"badge":11,"description":29},"udServer 1.13.0","2026-06-17","### Features\n\n- Added **bring-your-own Azure Blob Storage** support, alongside the existing S3 option.\n- Scenes now support virtual scene paths for organising scenes into a folder-like hierarchy.\n- Scenes are now displayed in a grid view and support basic text search as well as filtering untagged scenes.\n- Added drag-and-drop support for uploading files and folders.\n\n### Bug Fixes\n\n- Fixed S3-backed files with spaces in their paths failing to delete\n",{"title":31,"date":32,"badge":11,"description":33},"udServer 1.12.0","2026-06-16","### Features\n\n- Added **project and scene tags** for organising and filtering your content, with a colour-coded palette in the web UI.\n- Added direct **file download** support with appropriate permission gates.\n- Updated the bundled udStream client to 1.9.2.\n\n### Bug Fixes\n\n- Hardened the server against malformed requests.\n- Fixed case-sensitive HTTP header handling that caused problems behind some proxies.\n- Tuned the in-memory file cache for better performance.\n",{"title":35,"date":36,"badge":11,"description":37},"udServer 1.11.0 - 1.11.3","2026-05-28","### Features\n\n- Added an admin **System Log** page surfacing server-initiated events (startup, shutdown, license issues, OAuth changes, user creation, recovered crash backtraces) backed by a new `systemlog` table (db v210).\n- The admin **Server Config** page can now apply a new license JSON at runtime; the license is validated, takes effect immediately, and is persisted across restarts.\n- Added a **Licensed Domains** card to the Server Config page showing each licensed domain's session limit and premium status (hidden when the license has no domains).\n\n### Fixes\n\n- Fixed domain-licensed SDK sessions being logged out by `\u002Fapi\u002F_user\u002Fwhoami` returning `noauth`\n- Fixed domain licensing rejecting valid origins in some situations\n",{"title":39,"date":40,"badge":11,"description":41},"udServer 1.10.2","2026-04-23","### Features\n\n- Lots of user interface updates including an updated explore page and routing to organisations and projects\n- Updated docs to better explain the AWS S3 CORS issues\n\n### Bug Fixes\n\n- The SDK headers are delivered correctly for emscripten\u002Fbrowser deployments\n- Added better error messaging when a project doesn't have attached storage\n",{"title":43,"date":44,"badge":45,"description":46},"udServer 1.10.1","2026-04-20","Hotfix","### Bug Fixes\n\n- Fixed S3-backed files with spaces or backslashes in their paths failing to load\n",{"title":48,"date":44,"badge":20,"description":49},"udServer 1.10.0","### Features\n\n- Improved File UI & Backend\n  - Added file upload support, including direct upload and multipart upload\n  - Added file and folder delete support\n  - Added S3 prefix support for scoped file access\n- Improved error feedback for login errors\n\n### Bug Fixes\n\n- Fixed issues uploading and handling files with spaces in their names\n- Fixed JWT verification not reporting an error when the signing key was missing\n",{"title":51,"date":52,"badge":45,"description":53},"udServer 1.9.8","2026-03-26","### Bug Fixes\n\n- Updated localizations\n- Fixed bundled icons\n- Fixed pagination issues on some pages\n",{"title":55,"date":56,"badge":11,"description":57},"udServer 1.9.7","2026-03-25","### Features\n\n- Added Content Security Policy (CSP) header for improved browser security\n- Improved RS256 JWT signature verification for OAuth tokens\n- Software Packages are now available through udCloud\n- Added Sign In with Google option\n\n### Bug Fixes\n\n- Fixed the create API key modal not being cancellable\n- Fixed localisation issues in create modals and other UI elements\n",{"title":59,"date":60,"badge":11,"description":61},"udServer 1.9.6","2026-03-18","### Features\n\n- Active and previous sessions are now listed on the Security settings page\n- Folders are visually distinguished from files in the file browser\n- Scenes now display thumbnail previews\n- Major documentation overhaul\n- Added Amazon Linux support\n- Added domain-based licensing options\n\n### Bug Fixes\n\n- Users can now hold multiple pending invites across an organisation\n- Collaboration changes now correctly require Scene Edit permission\n- Fixed organisation permission caching that could result in stale access checks\n- Improved scene sync reliability for active collaborators\n- Fixed translation gaps and incorrect messaging on the docs page\n",{"title":63,"date":64,"badge":45,"description":65},"udServer 1.9.5","2026-02-10","### Features\n\n- Added an AWS EC2 deployment guide to the documentation\n\n### Bug Fixes\n\n- Fixed CORS preflight request handling\n- Fixed file streaming failures when requests pass through AWS Elastic Load Balancer\n",{"title":67,"date":68,"badge":11,"description":69},"udServer 1.9.4","2026-02-09","### Features\n\n- Added scene synchronisation API for udCloud collaboration\n- Added a file viewer for browsing project files\n- Added project settings page with S3 file storage configuration\n- Roles can now be edited and deleted\n- Added an embedded udStream web viewer\n- Bundled ImGui udStream as an available package\n- Documentation is now served directly from udServer with overhauled content, SSL guidance, and a service setup guide\n- Expired API keys now show a descriptive error message\n\n### Bug Fixes\n\n- Fixed API keys marked as never-expiring being incorrectly rejected\n- Fixed several Emscripten and collaboration session issues\n- Fixed file source name showing as blank instead of \"none\"\n- Fixed S3 file listing compatibility with older udCloud deployments\n- Fixed service name not being set correctly on initial configuration\n- Switching organisations now correctly reloads the active project\n",{"title":71,"date":72,"badge":11,"description":73},"udServer 1.9.3","2025-12-12","### Features\n\n- Organisation admins can now remove members, and members can leave an organisation themselves\n\n### Bug Fixes\n\n- Buttons that require permissions you don't hold are now hidden throughout the organisation pages\n- Organisation navigation items are hidden when you lack the necessary permissions to view them\n- Member roles are now displayed correctly in the Members list\n- Fixed invitation count badges incorrectly showing zero\n",{"title":75,"date":76,"badge":11,"description":77},"udServer 1.9.2","2025-12-11","### Features\n\n- Organisation members can now be invited by email\n- Added a role editor for organisation members\n- Added basic email address validation on invite inputs\n\n### Bug Fixes\n\n- Fixed a crash caused by malformed file range requests\n",{"title":79,"date":80,"badge":11,"description":81},"udServer 1.9.1","2025-12-04","### Features\n\n- Added organisation Members and Settings pages\n- Added role management for organisations\n- Scenes can now be uploaded directly from the UI\n- udStream can now load point clouds using a session ID\n- Added support for S3 and Google Cloud Storage file access\n\n### Bug Fixes\n\n- Fixed API key authentication failures\n- Scenes are now sorted alphabetically\n- Fixed sessions not being accepted after login\n",{"title":83,"date":84,"badge":85,"description":86},"udServer 1.9.0","2025-11-14","Initial Release","### Features\n\n- Completely redesigned user interface\n- Added OAuth2 single sign-on support\n- Added API key authentication\n- Added link code login for device and headless authentication\n- Added the ability to share scenes with other users\n- Login now redirects back to the page you were on\n- Project-level permissions are now visible in the permissions list\n- Removed built-in identity provider — OAuth2 is now required\n- Removed LDAP authentication\n\n### Bug Fixes\n\n- Fixed the session approval dialog not reflecting the current state\n- Fixed OAuth provider configuration failing during initial setup\n- Fixed missing translations on the link login page\n- Fixed scene permission checks and added copy-code and delete actions\n- Fixed API keys not authenticating correctly\n","releases","dK0ZxZm58fM5YL4Odxaa1BqfRduALXeeT9yNvi5hU0g",{"data":90,"body":91},{},{"type":92,"children":93},"root",[94,103,160,166,204,210],{"type":95,"tag":96,"props":97,"children":99},"element","h3",{"id":98},"features",[100],{"type":101,"value":102},"text","Features",{"type":95,"tag":104,"props":105,"children":106},"ul",{},[107,135,140,145,150,155],{"type":95,"tag":108,"props":109,"children":110},"li",{},[111,113,119,121,126,128,133],{"type":101,"value":112},"New organisations are now created from an organisation type: ",{"type":95,"tag":114,"props":115,"children":116},"strong",{},[117],{"type":101,"value":118},"collaborative",{"type":101,"value":120}," (the built-in defaults), ",{"type":95,"tag":114,"props":122,"children":123},{},[124],{"type":101,"value":125},"managed",{"type":101,"value":127}," (view-only defaults plus starter roles) or ",{"type":95,"tag":114,"props":129,"children":130},{},[131],{"type":101,"value":132},"blank",{"type":101,"value":134}," (no permissions at all), so a new organisation starts with the access model it actually wants.",{"type":95,"tag":108,"props":136,"children":137},{},[138],{"type":101,"value":139},"A scene published for preview can now be opened from its share code alone, with no account and no license of the viewer's own. Publishing a preview link requires the Scene Share permission and a Studio license; withdrawing one requires only the permission, so an expired license can never strand a link that is already out.",{"type":95,"tag":108,"props":141,"children":142},{},[143],{"type":101,"value":144},"The udStream web viewer is now packaged with the server, so a deployment serves its own viewer and signs in against the server hosting it rather than udCloud. Bundled viewer build is udStream 1.9.3.",{"type":95,"tag":108,"props":146,"children":147},{},[148],{"type":101,"value":149},"Collaborative scene editing is markedly faster and more reliable. Scene changes are now ordered by a per-scene edit sequence and served from an in-memory queue, so an edit can no longer be skipped over while its write is still in flight, and a viewer's presence no longer writes a database row on every poll. A drag now reaches storage as the position it settled on instead of as every frame of it.",{"type":95,"tag":108,"props":151,"children":152},{},[153],{"type":101,"value":154},"WebSocket connections now close with a reason code rather than a bare disconnect, so a client can tell a rejected sign-in from a dropped network and stop retrying. A slow or stalled client no longer holds up traffic for everyone else, and a session is limited to a small number of simultaneous connections as a backstop against a reconnect loop.",{"type":95,"tag":108,"props":156,"children":157},{},[158],{"type":101,"value":159},"Updated the user guide.",{"type":95,"tag":96,"props":161,"children":163},{"id":162},"bug-fixes",[164],{"type":101,"value":165},"Bug Fixes",{"type":95,"tag":104,"props":167,"children":168},{},[169,174,179,184,189,194,199],{"type":95,"tag":108,"props":170,"children":171},{},[172],{"type":101,"value":173},"Fixed sessions licensed by email domain always being treated as udStream Studio regardless of the tier their domain entry actually grants.",{"type":95,"tag":108,"props":175,"children":176},{},[177],{"type":101,"value":178},"Improved handling of udSDK signatures to better support older udSDK builds",{"type":95,"tag":108,"props":180,"children":181},{},[182],{"type":101,"value":183},"Fixed a failed restore being able to leave the database committed and half-migrated, and then handing it back to traffic. A restore now either lands whole or leaves nothing behind, and the server holds maintenance mode if it cannot confirm the database survived.",{"type":95,"tag":108,"props":185,"children":186},{},[187],{"type":101,"value":188},"Fixed scene edits being held in memory until shutdown when a write failed and the server then went quiet.",{"type":95,"tag":108,"props":190,"children":191},{},[192],{"type":101,"value":193},"Fixed memory leaks when approving an SDK key and when changing a session's user.",{"type":95,"tag":108,"props":195,"children":196},{},[197],{"type":101,"value":198},"Fixed the scene viewer page showing a login box in states where it did not apply.",{"type":95,"tag":108,"props":200,"children":201},{},[202],{"type":101,"value":203},"Updated localisations.",{"type":95,"tag":96,"props":205,"children":207},{"id":206},"upgrade-notes",[208],{"type":101,"value":209},"Upgrade Notes",{"type":95,"tag":104,"props":211,"children":212},{},[213],{"type":95,"tag":108,"props":214,"children":215},{},[216,218,223],{"type":101,"value":217},"The database is migrated from v227 to ",{"type":95,"tag":114,"props":219,"children":220},{},[221],{"type":101,"value":222},"v232",{"type":101,"value":224}," on first start. Take a backup before upgrading.",{"data":226,"body":227},{},{"type":92,"children":228},[229,233,256,260],{"type":95,"tag":96,"props":230,"children":231},{"id":98},[232],{"type":101,"value":102},{"type":95,"tag":104,"props":234,"children":235},{},[236,241,246,251],{"type":95,"tag":108,"props":237,"children":238},{},[239],{"type":101,"value":240},"Egress usage now breaks down three ways instead of one — by category, by project (organisation view) or organisation (server admin view), and by user — making it clearer where outbound traffic is coming from. Seeing a user's name and email alongside their volume requires the User List permission.",{"type":95,"tag":108,"props":242,"children":243},{},[244],{"type":101,"value":245},"Images and screenshots can now be pasted or dropped straight onto a work item as it is created.",{"type":95,"tag":108,"props":247,"children":248},{},[249],{"type":101,"value":250},"Work items now open on the kanban board by default.",{"type":95,"tag":108,"props":252,"children":253},{},[254],{"type":101,"value":255},"The login page now explains that signing in creates the account, as there is no separate sign-up step.",{"type":95,"tag":96,"props":257,"children":258},{"id":162},[259],{"type":101,"value":165},{"type":95,"tag":104,"props":261,"children":262},{},[263,268,273],{"type":95,"tag":108,"props":264,"children":265},{},[266],{"type":101,"value":267},"Fixed the admin pages reformatting a server or issued license when displaying it, which invalidated its signature.",{"type":95,"tag":108,"props":269,"children":270},{},[271],{"type":101,"value":272},"Fixed email unsubscribe pages not being shown in the recipient's preferred language.",{"type":95,"tag":108,"props":274,"children":275},{},[276],{"type":101,"value":277},"Fixed the project files list being narrower than its panel, which clipped ordinary-length filenames.",{"data":279,"body":280},{},{"type":92,"children":281},[282,286,570,574,602,606],{"type":95,"tag":96,"props":283,"children":284},{"id":98},[285],{"type":101,"value":102},{"type":95,"tag":104,"props":287,"children":288},{},[289,382,401,413,424,436,447,503,514,525,537,549,560,565],{"type":95,"tag":108,"props":290,"children":291},{},[292,294,299,301],{"type":101,"value":293},"Added ",{"type":95,"tag":114,"props":295,"children":296},{},[297],{"type":101,"value":298},"user licensing",{"type":101,"value":300},", managed by organisations rather than admins.\n",{"type":95,"tag":104,"props":302,"children":303},{},[304,343,348,360,372,377],{"type":95,"tag":108,"props":305,"children":306},{},[307,309,314,316,321,322,327,329,334,336,341],{"type":101,"value":308},"Licenses are issued as tiers (",{"type":95,"tag":114,"props":310,"children":311},{},[312],{"type":101,"value":313},"udSDK Basic",{"type":101,"value":315},", ",{"type":95,"tag":114,"props":317,"children":318},{},[319],{"type":101,"value":320},"udStream Analyst",{"type":101,"value":315},{"type":95,"tag":114,"props":323,"children":324},{},[325],{"type":101,"value":326},"udStream Studio",{"type":101,"value":328},") with optional ",{"type":95,"tag":114,"props":330,"children":331},{},[332],{"type":101,"value":333},"SolidScan",{"type":101,"value":335}," and ",{"type":95,"tag":114,"props":337,"children":338},{},[339],{"type":101,"value":340},"Strategic",{"type":101,"value":342}," add-ons.",{"type":95,"tag":108,"props":344,"children":345},{},[346],{"type":101,"value":347},"Each organisation has a seat allocation ledger, and administrators can assign, revoke and review licenses per user.",{"type":95,"tag":108,"props":349,"children":350},{},[351,353,358],{"type":101,"value":352},"Seats can be purchased for an organisation directly through ",{"type":95,"tag":114,"props":354,"children":355},{},[356],{"type":101,"value":357},"Stripe",{"type":101,"value":359}," checkout, with several products bought in a single transaction.",{"type":95,"tag":108,"props":361,"children":362},{},[363,365,370],{"type":101,"value":364},"A scene can grant a view-only ",{"type":95,"tag":114,"props":366,"children":367},{},[368],{"type":101,"value":369},"Previewer",{"type":101,"value":371}," license, so somebody can open a shared scene without holding a license of their own.",{"type":95,"tag":108,"props":373,"children":374},{},[375],{"type":101,"value":376},"Added an organisation activity log, per-domain license tiers, and a phase-out report for legacy domain licensing.",{"type":95,"tag":108,"props":378,"children":379},{},[380],{"type":101,"value":381},"Server administrators can manage any organisation's licenses from the admin organisations page.",{"type":95,"tag":108,"props":383,"children":384},{},[385,387,392,394,399],{"type":101,"value":386},"udServer can now act as a ",{"type":95,"tag":114,"props":388,"children":389},{},[390],{"type":101,"value":391},"license issuer",{"type":101,"value":393},". The standalone udLicenseServer has been folded in: a server whose license carries an issuer key can register downstream servers and mint their licenses from the new ",{"type":95,"tag":114,"props":395,"children":396},{},[397],{"type":101,"value":398},"License Issuer",{"type":101,"value":400}," admin page.",{"type":95,"tag":108,"props":402,"children":403},{},[404,406,411],{"type":101,"value":405},"Added native ",{"type":95,"tag":114,"props":407,"children":408},{},[409],{"type":101,"value":410},"backups",{"type":101,"value":412}," without having to touch pg directly. An administrator can take a full server backup and restore from one, with the server held in maintenance mode while a restore runs.",{"type":95,"tag":108,"props":414,"children":415},{},[416,417,422],{"type":101,"value":293},{"type":95,"tag":114,"props":418,"children":419},{},[420],{"type":101,"value":421},"work items",{"type":101,"value":423}," — per-project tasks and QA items with states, tags, comments, an edit history, and a drag-and-drop board.",{"type":95,"tag":108,"props":425,"children":426},{},[427,429,434],{"type":101,"value":428},"Added a ",{"type":95,"tag":114,"props":430,"children":431},{},[432],{"type":101,"value":433},"WebSocket API",{"type":101,"value":435},". Scene updates are now pushed event-driven per scene instead of polled, which takes most of the latency out of collaborative editing.",{"type":95,"tag":108,"props":437,"children":438},{},[439,440,445],{"type":101,"value":293},{"type":95,"tag":114,"props":441,"children":442},{},[443],{"type":101,"value":444},"email support",{"type":101,"value":446},": a proper SMTP transport, a persistent send queue, localised content, per-user notification preferences, and bounce suppression. Organisation invitations, cancellations, acceptances, member removals and role changes all send mail.",{"type":95,"tag":108,"props":448,"children":449},{},[450,452],{"type":101,"value":451},"Organisations can now be joined without one-at-a-time invitations:\n",{"type":95,"tag":104,"props":453,"children":454},{},[455,467,479,484],{"type":95,"tag":108,"props":456,"children":457},{},[458,460,465],{"type":101,"value":459},"Organisations can claim ",{"type":95,"tag":114,"props":461,"children":462},{},[463],{"type":101,"value":464},"email domains",{"type":101,"value":466},", so colleagues find and join on their own. Claiming a domain requires an address on it, and public webmail providers are blocked server-wide.",{"type":95,"tag":108,"props":468,"children":469},{},[470,472,477],{"type":101,"value":471},"Added reusable, revocable ",{"type":95,"tag":114,"props":473,"children":474},{},[475],{"type":101,"value":476},"invite links",{"type":101,"value":478}," with optional expiry and use limits.",{"type":95,"tag":108,"props":480,"children":481},{},[482],{"type":101,"value":483},"Requests to join can require approval, and appear alongside invites on the members page.",{"type":95,"tag":108,"props":485,"children":486},{},[487,489,494,496,501],{"type":101,"value":488},"Added the ",{"type":95,"tag":114,"props":490,"children":491},{},[492],{"type":101,"value":493},"Manage Joining",{"type":101,"value":495}," organisation permission, and a ",{"type":95,"tag":114,"props":497,"children":498},{},[499],{"type":101,"value":500},"Blocked joining domains",{"type":101,"value":502}," server setting.",{"type":95,"tag":108,"props":504,"children":505},{},[506,507,512],{"type":101,"value":293},{"type":95,"tag":114,"props":508,"children":509},{},[510],{"type":101,"value":511},"project and organisation deletion",{"type":101,"value":513},", with a retention period before the data is swept and purged.",{"type":95,"tag":108,"props":515,"children":516},{},[517,518,523],{"type":101,"value":293},{"type":95,"tag":114,"props":519,"children":520},{},[521],{"type":101,"value":522},"egress logging",{"type":101,"value":524},": outbound bytes are recorded per request against a category, with usage reporting for both organisation administrators and server administrators.",{"type":95,"tag":108,"props":526,"children":527},{},[528,530,535],{"type":101,"value":529},"Projects can now keep files on a ",{"type":95,"tag":114,"props":531,"children":532},{},[533],{"type":101,"value":534},"local or network-mounted drive",{"type":101,"value":536},", gated by a server-wide allowed storage root.",{"type":95,"tag":108,"props":538,"children":539},{},[540,542,547],{"type":101,"value":541},"Added better support for running ",{"type":95,"tag":114,"props":543,"children":544},{},[545],{"type":101,"value":546},"behind a reverse proxy",{"type":101,"value":548},", so the real client address is used.",{"type":95,"tag":108,"props":550,"children":551},{},[552,553,558],{"type":101,"value":293},{"type":95,"tag":114,"props":554,"children":555},{},[556],{"type":101,"value":557},"legal documents",{"type":101,"value":559},": a deployment can publish its privacy policy, terms of service and subprocessor list, each either served by the server or linked out to an external URL.",{"type":95,"tag":108,"props":561,"children":562},{},[563],{"type":101,"value":564},"Scenes can now be created directly from the portal.",{"type":95,"tag":108,"props":566,"children":567},{},[568],{"type":101,"value":569},"A web UI consistency pass: navigation sync, a copy sweep, permission-aware controls that hide actions that would fail, and numerous small UX fixes.",{"type":95,"tag":96,"props":571,"children":572},{"id":162},[573],{"type":101,"value":165},{"type":95,"tag":104,"props":575,"children":576},{},[577,582,587,592,597],{"type":95,"tag":108,"props":578,"children":579},{},[580],{"type":101,"value":581},"Fixed accepting an organisation invitation reporting a server fault: the user was added but their roles were never applied and the invitation was left behind.",{"type":95,"tag":108,"props":583,"children":584},{},[585],{"type":101,"value":586},"Fixed a login rejected because the account is disabled reporting a generic failure instead of the real reason.",{"type":95,"tag":108,"props":588,"children":589},{},[590],{"type":101,"value":591},"Fixed several scene synchronisation issues, including changes being missed when a scene's change window closed early.",{"type":95,"tag":108,"props":593,"children":594},{},[595],{"type":101,"value":596},"Fixed memory leaks in server configuration handling and in backups.",{"type":95,"tag":108,"props":598,"children":599},{},[600],{"type":101,"value":601},"Fixed permission strings being too short to hold the full permission set.",{"type":95,"tag":96,"props":603,"children":604},{"id":206},[605],{"type":101,"value":209},{"type":95,"tag":104,"props":607,"children":608},{},[609,620],{"type":95,"tag":108,"props":610,"children":611},{},[612,614,619],{"type":101,"value":613},"The database is migrated from v214 to ",{"type":95,"tag":114,"props":615,"children":616},{},[617],{"type":101,"value":618},"v227",{"type":101,"value":224},{"type":95,"tag":108,"props":621,"children":622},{},[623,630],{"type":95,"tag":624,"props":625,"children":627},"code",{"className":626},[],[628],{"type":101,"value":629},"udLicenseServer",{"type":101,"value":631}," is no longer built or shipped; udServer performs that role now.",{"data":633,"body":634},{},{"type":92,"children":635},[636,640,706,710],{"type":95,"tag":96,"props":637,"children":638},{"id":98},[639],{"type":101,"value":102},{"type":95,"tag":104,"props":641,"children":642},{},[643,654,666,678,683,695],{"type":95,"tag":108,"props":644,"children":645},{},[646,647,652],{"type":101,"value":293},{"type":95,"tag":114,"props":648,"children":649},{},[650],{"type":101,"value":651},"file previews",{"type":101,"value":653}," for images and videos directly in the web UI.",{"type":95,"tag":108,"props":655,"children":656},{},[657,659,664],{"type":101,"value":658},"Projects can now ",{"type":95,"tag":114,"props":660,"children":661},{},[662],{"type":101,"value":663},"redirect file downloads (HTTP 302)",{"type":101,"value":665}," directly to their S3 \u002F Azure Blob Storage, reducing load on the server.",{"type":95,"tag":108,"props":667,"children":668},{},[669,671,676],{"type":101,"value":670},"The File API now reports ",{"type":95,"tag":114,"props":672,"children":673},{},[674],{"type":101,"value":675},"MIME types",{"type":101,"value":677}," for files.",{"type":95,"tag":108,"props":679,"children":680},{},[681],{"type":101,"value":682},"Improved the upload experience, with cleaner folder uploads.",{"type":95,"tag":108,"props":684,"children":685},{},[686,688,693],{"type":101,"value":687},"Added web server ",{"type":95,"tag":114,"props":689,"children":690},{},[691],{"type":101,"value":692},"queue statistics",{"type":101,"value":694}," and a server load chart to the admin pages.",{"type":95,"tag":108,"props":696,"children":697},{},[698,699,704],{"type":101,"value":428},{"type":95,"tag":114,"props":700,"children":701},{},[702],{"type":101,"value":703},"system requirements",{"type":101,"value":705}," page to the admin documentation.",{"type":95,"tag":96,"props":707,"children":708},{"id":162},[709],{"type":101,"value":165},{"type":95,"tag":104,"props":711,"children":712},{},[713],{"type":95,"tag":108,"props":714,"children":715},{},[716],{"type":101,"value":717},"Fixed issues forwarding partial content (HTTP 206) responses.",{"data":719,"body":720},{},{"type":92,"children":721},[722,726,755,759],{"type":95,"tag":96,"props":723,"children":724},{"id":98},[725],{"type":101,"value":102},{"type":95,"tag":104,"props":727,"children":728},{},[729,740,745,750],{"type":95,"tag":108,"props":730,"children":731},{},[732,733,738],{"type":101,"value":293},{"type":95,"tag":114,"props":734,"children":735},{},[736],{"type":101,"value":737},"bring-your-own Azure Blob Storage",{"type":101,"value":739}," support, alongside the existing S3 option.",{"type":95,"tag":108,"props":741,"children":742},{},[743],{"type":101,"value":744},"Scenes now support virtual scene paths for organising scenes into a folder-like hierarchy.",{"type":95,"tag":108,"props":746,"children":747},{},[748],{"type":101,"value":749},"Scenes are now displayed in a grid view and support basic text search as well as filtering untagged scenes.",{"type":95,"tag":108,"props":751,"children":752},{},[753],{"type":101,"value":754},"Added drag-and-drop support for uploading files and folders.",{"type":95,"tag":96,"props":756,"children":757},{"id":162},[758],{"type":101,"value":165},{"type":95,"tag":104,"props":760,"children":761},{},[762],{"type":95,"tag":108,"props":763,"children":764},{},[765],{"type":101,"value":766},"Fixed S3-backed files with spaces in their paths failing to delete",{"data":768,"body":769},{},{"type":92,"children":770},[771,775,806,810],{"type":95,"tag":96,"props":772,"children":773},{"id":98},[774],{"type":101,"value":102},{"type":95,"tag":104,"props":776,"children":777},{},[778,789,801],{"type":95,"tag":108,"props":779,"children":780},{},[781,782,787],{"type":101,"value":293},{"type":95,"tag":114,"props":783,"children":784},{},[785],{"type":101,"value":786},"project and scene tags",{"type":101,"value":788}," for organising and filtering your content, with a colour-coded palette in the web UI.",{"type":95,"tag":108,"props":790,"children":791},{},[792,794,799],{"type":101,"value":793},"Added direct ",{"type":95,"tag":114,"props":795,"children":796},{},[797],{"type":101,"value":798},"file download",{"type":101,"value":800}," support with appropriate permission gates.",{"type":95,"tag":108,"props":802,"children":803},{},[804],{"type":101,"value":805},"Updated the bundled udStream client to 1.9.2.",{"type":95,"tag":96,"props":807,"children":808},{"id":162},[809],{"type":101,"value":165},{"type":95,"tag":104,"props":811,"children":812},{},[813,818,823],{"type":95,"tag":108,"props":814,"children":815},{},[816],{"type":101,"value":817},"Hardened the server against malformed requests.",{"type":95,"tag":108,"props":819,"children":820},{},[821],{"type":101,"value":822},"Fixed case-sensitive HTTP header handling that caused problems behind some proxies.",{"type":95,"tag":108,"props":824,"children":825},{},[826],{"type":101,"value":827},"Tuned the in-memory file cache for better performance.",{"data":829,"body":830},{},{"type":92,"children":831},[832,836,882,888],{"type":95,"tag":96,"props":833,"children":834},{"id":98},[835],{"type":101,"value":102},{"type":95,"tag":104,"props":837,"children":838},{},[839,859,871],{"type":95,"tag":108,"props":840,"children":841},{},[842,844,849,851,857],{"type":101,"value":843},"Added an admin ",{"type":95,"tag":114,"props":845,"children":846},{},[847],{"type":101,"value":848},"System Log",{"type":101,"value":850}," page surfacing server-initiated events (startup, shutdown, license issues, OAuth changes, user creation, recovered crash backtraces) backed by a new ",{"type":95,"tag":624,"props":852,"children":854},{"className":853},[],[855],{"type":101,"value":856},"systemlog",{"type":101,"value":858}," table (db v210).",{"type":95,"tag":108,"props":860,"children":861},{},[862,864,869],{"type":101,"value":863},"The admin ",{"type":95,"tag":114,"props":865,"children":866},{},[867],{"type":101,"value":868},"Server Config",{"type":101,"value":870}," page can now apply a new license JSON at runtime; the license is validated, takes effect immediately, and is persisted across restarts.",{"type":95,"tag":108,"props":872,"children":873},{},[874,875,880],{"type":101,"value":428},{"type":95,"tag":114,"props":876,"children":877},{},[878],{"type":101,"value":879},"Licensed Domains",{"type":101,"value":881}," card to the Server Config page showing each licensed domain's session limit and premium status (hidden when the license has no domains).",{"type":95,"tag":96,"props":883,"children":885},{"id":884},"fixes",[886],{"type":101,"value":887},"Fixes",{"type":95,"tag":104,"props":889,"children":890},{},[891,910],{"type":95,"tag":108,"props":892,"children":893},{},[894,896,902,904],{"type":101,"value":895},"Fixed domain-licensed SDK sessions being logged out by ",{"type":95,"tag":624,"props":897,"children":899},{"className":898},[],[900],{"type":101,"value":901},"\u002Fapi\u002F_user\u002Fwhoami",{"type":101,"value":903}," returning ",{"type":95,"tag":624,"props":905,"children":907},{"className":906},[],[908],{"type":101,"value":909},"noauth",{"type":95,"tag":108,"props":911,"children":912},{},[913],{"type":101,"value":914},"Fixed domain licensing rejecting valid origins in some situations",{"data":916,"body":917},{},{"type":92,"children":918},[919,923,936,940],{"type":95,"tag":96,"props":920,"children":921},{"id":98},[922],{"type":101,"value":102},{"type":95,"tag":104,"props":924,"children":925},{},[926,931],{"type":95,"tag":108,"props":927,"children":928},{},[929],{"type":101,"value":930},"Lots of user interface updates including an updated explore page and routing to organisations and projects",{"type":95,"tag":108,"props":932,"children":933},{},[934],{"type":101,"value":935},"Updated docs to better explain the AWS S3 CORS issues",{"type":95,"tag":96,"props":937,"children":938},{"id":162},[939],{"type":101,"value":165},{"type":95,"tag":104,"props":941,"children":942},{},[943,948],{"type":95,"tag":108,"props":944,"children":945},{},[946],{"type":101,"value":947},"The SDK headers are delivered correctly for emscripten\u002Fbrowser deployments",{"type":95,"tag":108,"props":949,"children":950},{},[951],{"type":101,"value":952},"Added better error messaging when a project doesn't have attached storage",{"data":954,"body":955},{},{"type":92,"children":956},[957,961],{"type":95,"tag":96,"props":958,"children":959},{"id":162},[960],{"type":101,"value":165},{"type":95,"tag":104,"props":962,"children":963},{},[964],{"type":95,"tag":108,"props":965,"children":966},{},[967],{"type":101,"value":968},"Fixed S3-backed files with spaces or backslashes in their paths failing to load",{"data":970,"body":971},{},{"type":92,"children":972},[973,977,1008,1012],{"type":95,"tag":96,"props":974,"children":975},{"id":98},[976],{"type":101,"value":102},{"type":95,"tag":104,"props":978,"children":979},{},[980,1003],{"type":95,"tag":108,"props":981,"children":982},{},[983,985],{"type":101,"value":984},"Improved File UI & Backend\n",{"type":95,"tag":104,"props":986,"children":987},{},[988,993,998],{"type":95,"tag":108,"props":989,"children":990},{},[991],{"type":101,"value":992},"Added file upload support, including direct upload and multipart upload",{"type":95,"tag":108,"props":994,"children":995},{},[996],{"type":101,"value":997},"Added file and folder delete support",{"type":95,"tag":108,"props":999,"children":1000},{},[1001],{"type":101,"value":1002},"Added S3 prefix support for scoped file access",{"type":95,"tag":108,"props":1004,"children":1005},{},[1006],{"type":101,"value":1007},"Improved error feedback for login errors",{"type":95,"tag":96,"props":1009,"children":1010},{"id":162},[1011],{"type":101,"value":165},{"type":95,"tag":104,"props":1013,"children":1014},{},[1015,1020],{"type":95,"tag":108,"props":1016,"children":1017},{},[1018],{"type":101,"value":1019},"Fixed issues uploading and handling files with spaces in their names",{"type":95,"tag":108,"props":1021,"children":1022},{},[1023],{"type":101,"value":1024},"Fixed JWT verification not reporting an error when the signing key was missing",{"data":1026,"body":1027},{},{"type":92,"children":1028},[1029,1033],{"type":95,"tag":96,"props":1030,"children":1031},{"id":162},[1032],{"type":101,"value":165},{"type":95,"tag":104,"props":1034,"children":1035},{},[1036,1041,1046],{"type":95,"tag":108,"props":1037,"children":1038},{},[1039],{"type":101,"value":1040},"Updated localizations",{"type":95,"tag":108,"props":1042,"children":1043},{},[1044],{"type":101,"value":1045},"Fixed bundled icons",{"type":95,"tag":108,"props":1047,"children":1048},{},[1049],{"type":101,"value":1050},"Fixed pagination issues on some pages",{"data":1052,"body":1053},{},{"type":92,"children":1054},[1055,1059,1082,1086],{"type":95,"tag":96,"props":1056,"children":1057},{"id":98},[1058],{"type":101,"value":102},{"type":95,"tag":104,"props":1060,"children":1061},{},[1062,1067,1072,1077],{"type":95,"tag":108,"props":1063,"children":1064},{},[1065],{"type":101,"value":1066},"Added Content Security Policy (CSP) header for improved browser security",{"type":95,"tag":108,"props":1068,"children":1069},{},[1070],{"type":101,"value":1071},"Improved RS256 JWT signature verification for OAuth tokens",{"type":95,"tag":108,"props":1073,"children":1074},{},[1075],{"type":101,"value":1076},"Software Packages are now available through udCloud",{"type":95,"tag":108,"props":1078,"children":1079},{},[1080],{"type":101,"value":1081},"Added Sign In with Google option",{"type":95,"tag":96,"props":1083,"children":1084},{"id":162},[1085],{"type":101,"value":165},{"type":95,"tag":104,"props":1087,"children":1088},{},[1089,1094],{"type":95,"tag":108,"props":1090,"children":1091},{},[1092],{"type":101,"value":1093},"Fixed the create API key modal not being cancellable",{"type":95,"tag":108,"props":1095,"children":1096},{},[1097],{"type":101,"value":1098},"Fixed localisation issues in create modals and other UI elements",{"data":1100,"body":1101},{},{"type":92,"children":1102},[1103,1107,1140,1144],{"type":95,"tag":96,"props":1104,"children":1105},{"id":98},[1106],{"type":101,"value":102},{"type":95,"tag":104,"props":1108,"children":1109},{},[1110,1115,1120,1125,1130,1135],{"type":95,"tag":108,"props":1111,"children":1112},{},[1113],{"type":101,"value":1114},"Active and previous sessions are now listed on the Security settings page",{"type":95,"tag":108,"props":1116,"children":1117},{},[1118],{"type":101,"value":1119},"Folders are visually distinguished from files in the file browser",{"type":95,"tag":108,"props":1121,"children":1122},{},[1123],{"type":101,"value":1124},"Scenes now display thumbnail previews",{"type":95,"tag":108,"props":1126,"children":1127},{},[1128],{"type":101,"value":1129},"Major documentation overhaul",{"type":95,"tag":108,"props":1131,"children":1132},{},[1133],{"type":101,"value":1134},"Added Amazon Linux support",{"type":95,"tag":108,"props":1136,"children":1137},{},[1138],{"type":101,"value":1139},"Added domain-based licensing options",{"type":95,"tag":96,"props":1141,"children":1142},{"id":162},[1143],{"type":101,"value":165},{"type":95,"tag":104,"props":1145,"children":1146},{},[1147,1152,1157,1162,1167],{"type":95,"tag":108,"props":1148,"children":1149},{},[1150],{"type":101,"value":1151},"Users can now hold multiple pending invites across an organisation",{"type":95,"tag":108,"props":1153,"children":1154},{},[1155],{"type":101,"value":1156},"Collaboration changes now correctly require Scene Edit permission",{"type":95,"tag":108,"props":1158,"children":1159},{},[1160],{"type":101,"value":1161},"Fixed organisation permission caching that could result in stale access checks",{"type":95,"tag":108,"props":1163,"children":1164},{},[1165],{"type":101,"value":1166},"Improved scene sync reliability for active collaborators",{"type":95,"tag":108,"props":1168,"children":1169},{},[1170],{"type":101,"value":1171},"Fixed translation gaps and incorrect messaging on the docs page",{"data":1173,"body":1174},{},{"type":92,"children":1175},[1176,1180,1188,1192],{"type":95,"tag":96,"props":1177,"children":1178},{"id":98},[1179],{"type":101,"value":102},{"type":95,"tag":104,"props":1181,"children":1182},{},[1183],{"type":95,"tag":108,"props":1184,"children":1185},{},[1186],{"type":101,"value":1187},"Added an AWS EC2 deployment guide to the documentation",{"type":95,"tag":96,"props":1189,"children":1190},{"id":162},[1191],{"type":101,"value":165},{"type":95,"tag":104,"props":1193,"children":1194},{},[1195,1200],{"type":95,"tag":108,"props":1196,"children":1197},{},[1198],{"type":101,"value":1199},"Fixed CORS preflight request handling",{"type":95,"tag":108,"props":1201,"children":1202},{},[1203],{"type":101,"value":1204},"Fixed file streaming failures when requests pass through AWS Elastic Load Balancer",{"data":1206,"body":1207},{},{"type":92,"children":1208},[1209,1213,1256,1260],{"type":95,"tag":96,"props":1210,"children":1211},{"id":98},[1212],{"type":101,"value":102},{"type":95,"tag":104,"props":1214,"children":1215},{},[1216,1221,1226,1231,1236,1241,1246,1251],{"type":95,"tag":108,"props":1217,"children":1218},{},[1219],{"type":101,"value":1220},"Added scene synchronisation API for udCloud collaboration",{"type":95,"tag":108,"props":1222,"children":1223},{},[1224],{"type":101,"value":1225},"Added a file viewer for browsing project files",{"type":95,"tag":108,"props":1227,"children":1228},{},[1229],{"type":101,"value":1230},"Added project settings page with S3 file storage configuration",{"type":95,"tag":108,"props":1232,"children":1233},{},[1234],{"type":101,"value":1235},"Roles can now be edited and deleted",{"type":95,"tag":108,"props":1237,"children":1238},{},[1239],{"type":101,"value":1240},"Added an embedded udStream web viewer",{"type":95,"tag":108,"props":1242,"children":1243},{},[1244],{"type":101,"value":1245},"Bundled ImGui udStream as an available package",{"type":95,"tag":108,"props":1247,"children":1248},{},[1249],{"type":101,"value":1250},"Documentation is now served directly from udServer with overhauled content, SSL guidance, and a service setup guide",{"type":95,"tag":108,"props":1252,"children":1253},{},[1254],{"type":101,"value":1255},"Expired API keys now show a descriptive error message",{"type":95,"tag":96,"props":1257,"children":1258},{"id":162},[1259],{"type":101,"value":165},{"type":95,"tag":104,"props":1261,"children":1262},{},[1263,1268,1273,1278,1283,1288],{"type":95,"tag":108,"props":1264,"children":1265},{},[1266],{"type":101,"value":1267},"Fixed API keys marked as never-expiring being incorrectly rejected",{"type":95,"tag":108,"props":1269,"children":1270},{},[1271],{"type":101,"value":1272},"Fixed several Emscripten and collaboration session issues",{"type":95,"tag":108,"props":1274,"children":1275},{},[1276],{"type":101,"value":1277},"Fixed file source name showing as blank instead of \"none\"",{"type":95,"tag":108,"props":1279,"children":1280},{},[1281],{"type":101,"value":1282},"Fixed S3 file listing compatibility with older udCloud deployments",{"type":95,"tag":108,"props":1284,"children":1285},{},[1286],{"type":101,"value":1287},"Fixed service name not being set correctly on initial configuration",{"type":95,"tag":108,"props":1289,"children":1290},{},[1291],{"type":101,"value":1292},"Switching organisations now correctly reloads the active project",{"data":1294,"body":1295},{},{"type":92,"children":1296},[1297,1301,1309,1313],{"type":95,"tag":96,"props":1298,"children":1299},{"id":98},[1300],{"type":101,"value":102},{"type":95,"tag":104,"props":1302,"children":1303},{},[1304],{"type":95,"tag":108,"props":1305,"children":1306},{},[1307],{"type":101,"value":1308},"Organisation admins can now remove members, and members can leave an organisation themselves",{"type":95,"tag":96,"props":1310,"children":1311},{"id":162},[1312],{"type":101,"value":165},{"type":95,"tag":104,"props":1314,"children":1315},{},[1316,1321,1326,1331],{"type":95,"tag":108,"props":1317,"children":1318},{},[1319],{"type":101,"value":1320},"Buttons that require permissions you don't hold are now hidden throughout the organisation pages",{"type":95,"tag":108,"props":1322,"children":1323},{},[1324],{"type":101,"value":1325},"Organisation navigation items are hidden when you lack the necessary permissions to view them",{"type":95,"tag":108,"props":1327,"children":1328},{},[1329],{"type":101,"value":1330},"Member roles are now displayed correctly in the Members list",{"type":95,"tag":108,"props":1332,"children":1333},{},[1334],{"type":101,"value":1335},"Fixed invitation count badges incorrectly showing zero",{"data":1337,"body":1338},{},{"type":92,"children":1339},[1340,1344,1362,1366],{"type":95,"tag":96,"props":1341,"children":1342},{"id":98},[1343],{"type":101,"value":102},{"type":95,"tag":104,"props":1345,"children":1346},{},[1347,1352,1357],{"type":95,"tag":108,"props":1348,"children":1349},{},[1350],{"type":101,"value":1351},"Organisation members can now be invited by email",{"type":95,"tag":108,"props":1353,"children":1354},{},[1355],{"type":101,"value":1356},"Added a role editor for organisation members",{"type":95,"tag":108,"props":1358,"children":1359},{},[1360],{"type":101,"value":1361},"Added basic email address validation on invite inputs",{"type":95,"tag":96,"props":1363,"children":1364},{"id":162},[1365],{"type":101,"value":165},{"type":95,"tag":104,"props":1367,"children":1368},{},[1369],{"type":95,"tag":108,"props":1370,"children":1371},{},[1372],{"type":101,"value":1373},"Fixed a crash caused by malformed file range requests",{"data":1375,"body":1376},{},{"type":92,"children":1377},[1378,1382,1410,1414],{"type":95,"tag":96,"props":1379,"children":1380},{"id":98},[1381],{"type":101,"value":102},{"type":95,"tag":104,"props":1383,"children":1384},{},[1385,1390,1395,1400,1405],{"type":95,"tag":108,"props":1386,"children":1387},{},[1388],{"type":101,"value":1389},"Added organisation Members and Settings pages",{"type":95,"tag":108,"props":1391,"children":1392},{},[1393],{"type":101,"value":1394},"Added role management for organisations",{"type":95,"tag":108,"props":1396,"children":1397},{},[1398],{"type":101,"value":1399},"Scenes can now be uploaded directly from the UI",{"type":95,"tag":108,"props":1401,"children":1402},{},[1403],{"type":101,"value":1404},"udStream can now load point clouds using a session ID",{"type":95,"tag":108,"props":1406,"children":1407},{},[1408],{"type":101,"value":1409},"Added support for S3 and Google Cloud Storage file access",{"type":95,"tag":96,"props":1411,"children":1412},{"id":162},[1413],{"type":101,"value":165},{"type":95,"tag":104,"props":1415,"children":1416},{},[1417,1422,1427],{"type":95,"tag":108,"props":1418,"children":1419},{},[1420],{"type":101,"value":1421},"Fixed API key authentication failures",{"type":95,"tag":108,"props":1423,"children":1424},{},[1425],{"type":101,"value":1426},"Scenes are now sorted alphabetically",{"type":95,"tag":108,"props":1428,"children":1429},{},[1430],{"type":101,"value":1431},"Fixed sessions not being accepted after login",{"data":1433,"body":1434},{},{"type":92,"children":1435},[1436,1440,1488,1492],{"type":95,"tag":96,"props":1437,"children":1438},{"id":98},[1439],{"type":101,"value":102},{"type":95,"tag":104,"props":1441,"children":1442},{},[1443,1448,1453,1458,1463,1468,1473,1478,1483],{"type":95,"tag":108,"props":1444,"children":1445},{},[1446],{"type":101,"value":1447},"Completely redesigned user interface",{"type":95,"tag":108,"props":1449,"children":1450},{},[1451],{"type":101,"value":1452},"Added OAuth2 single sign-on support",{"type":95,"tag":108,"props":1454,"children":1455},{},[1456],{"type":101,"value":1457},"Added API key authentication",{"type":95,"tag":108,"props":1459,"children":1460},{},[1461],{"type":101,"value":1462},"Added link code login for device and headless authentication",{"type":95,"tag":108,"props":1464,"children":1465},{},[1466],{"type":101,"value":1467},"Added the ability to share scenes with other users",{"type":95,"tag":108,"props":1469,"children":1470},{},[1471],{"type":101,"value":1472},"Login now redirects back to the page you were on",{"type":95,"tag":108,"props":1474,"children":1475},{},[1476],{"type":101,"value":1477},"Project-level permissions are now visible in the permissions list",{"type":95,"tag":108,"props":1479,"children":1480},{},[1481],{"type":101,"value":1482},"Removed built-in identity provider — OAuth2 is now required",{"type":95,"tag":108,"props":1484,"children":1485},{},[1486],{"type":101,"value":1487},"Removed LDAP authentication",{"type":95,"tag":96,"props":1489,"children":1490},{"id":162},[1491],{"type":101,"value":165},{"type":95,"tag":104,"props":1493,"children":1494},{},[1495,1500,1505,1510,1515],{"type":95,"tag":108,"props":1496,"children":1497},{},[1498],{"type":101,"value":1499},"Fixed the session approval dialog not reflecting the current state",{"type":95,"tag":108,"props":1501,"children":1502},{},[1503],{"type":101,"value":1504},"Fixed OAuth provider configuration failing during initial setup",{"type":95,"tag":108,"props":1506,"children":1507},{},[1508],{"type":101,"value":1509},"Fixed missing translations on the link login page",{"type":95,"tag":108,"props":1511,"children":1512},{},[1513],{"type":101,"value":1514},"Fixed scene permission checks and added copy-code and delete actions",{"type":95,"tag":108,"props":1516,"children":1517},{},[1518],{"type":101,"value":1519},"Fixed API keys not authenticating correctly",1787483253316]