Changelog
All notable changes to this package will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
[0.4.3] - 2026-01-12
Added
- Environment interface and payload that can be added to the config. This will allow extra information to be associated with a request, reducing the need for capturing in promise lambdas.
[0.4.2] - 2025-12-03
Fixed
- ConsoleLogger crashes when no response object is returned, a check has been added and a new error shown when that happens.
[0.4.1] - 2025-09-09
Fixed
- Missing import statement in QueryString.cs when using a platform other than WebGL
[0.4.0] - 2025-07-07
Changed
- BREAKING: All uses of NameValueCollection are replaced with QueryParameters objects because of excessive garbage
generation. In your code you should check if you use NameValueCollection objects to hold data on query parameters and
change that to QueryParameter instances. This also means that iterating the result of Encode, Decode, Serialize and Deserialize will now return QueryParameter objects instead of strings. To get the actual values of a single query parameter, use the Values field.
Fixed
- Reduced the amount of garbage generated when interacting with QueryParameters and when using the QueryString utility class.
Added
- QueryParameter class to represent a single QueryParameter with is, possibly multiple, values.
[0.3.5] - 2025-06-03
Fixed
- Sending a request with no data will no longer receive a content type of "application/octet-stream" and thus potentially trigger a CORS Preflight request.
- Handling of content types when posting data has been improved to properly register the content type on the UploadHandlerRaw and from that onto the Request's Headers.
[0.3.4] - 2025-03-31
Fixed
QueryString.Encodethrows aNullValueExceptionwhen aQueryParametersobject with a null value
[0.3.3] - 2025-03-24
Added
- A new
Headervalue object to add headers to the Config object and Resource wrapper in an intuitive way Resourcenow supports theHeaderclass as an argument to theWithmethod set to have a convenient way to add headers using an intuitive interfaceHeadersupports an explicit case fromTuple<string, string>toHeaderto easily instantiate them.
[0.3.2] - 2025-02-17
Fixed
- Removed automatic setting of the application/octet-stream content type if a request's contents is null or a byte-array when retrieving a Byte Array, including a texture. This will always trigger a CORS preflight, and some webservers seem ill-equipped to handle this.
- Only create an ExpectedTypeOfResponse object if none is present in the configuration; this way you can pass your own options to certain responses, such as setting the Readable flag for a texture.
[0.3.1] - 2025-02-10
Fixed
- Removed automatic setting of the application/octet-stream content type if a request's contents is null or a byte-array when retrieving the file as a cached FileInfo. This will always trigger a CORS preflight, and some webservers seem ill-equipped to handle this.
[0.3.0]
Added
- An uxios-specific User Agent string is now set by default instead of relying on the transport providing a user agent
- The Headers collection now features a basic series of constants describing headers that are added
- A Request Id is now available with Request objects, an internal id is used unless the user provides a header X-Request-Id, in which case that will also internally be used as id for the request.
Uxios.AsCoroutine- a wrapper around a promise that will allow it to be used in situations where you just must have a coroutine. Don't use this when you don't need to, some libraries require coroutines. See https://kind-men.github.io/uxios/explanation/coroutines/ for more information.- Automatic cancellation of requests if Coroutines are stopped using StopCoroutine. A Keep Alive mechanism is introduced that will check whether a Coroutine / subprocess is alive every frame.
- Aborting a request will issue more specific Error:
RequestAbortedError, which inherits fromConnectionError. - Query strings can now be serialized and deserialized to and from structs/classes using
QueryString.SerializeandQueryString.Deserializefor type-safe declarations of query parameters.
Changed
- Cancellation - you must now use
Uxios.Abortto manually abort a promise' HTTP request instead of passing a CancellationToken and managing the CancellationTokenSource manually. See https://kind-men.github.io/uxios/guides/cancellation/ for more information. - Added an interface above the Response object to make it easier to replace or change the response in the future
Removed
- Cancellation Tokens passed into the Config are now ignored - Uxios' new cancellation mechanism will completely manage
the tokens and source, use
Uxios.Abortto abort a running promise
Fixed
- Downloading files using the FileInfo generic sometimes errored because application/octetstream was given as mimtype, but a webserver could return a 406 if it was configured to accept limited mime types for a file. To fix this, we do not pass an accept header at all but let the browser figure it out.
[0.2.0] - 2024-11-18
Added
- AuthenticationError for all Authentication related errors
- UnauthorizedError when an unauthenticated user must authenticate to access the resource, or authentication failed (HTTP 401)
- ForbiddenError when an authenticated user is not allowed to access the resource (HTTP 403)
- Support for Templated URI's, you can prepare a templated URI that will resolve with given parameters
- Full support for cancellation sources/tokens
- Support for authentication in the Resource class using the 'As' method
- Support for multiple Transports based on scheme - this is an experimental feature to verify whether it is possible to load files from various locations based on the scheme
unity+persistentscheme that allows for files to be loaded and stored to and from the persistentDataPath in Unity, even on WebGL
Changed
- Errors now can -and should- have a reference to an innerException for better traceability
- Json conversion is now done as a system-default response interception
- Interceptors are no longer static - but for the moment only the ones on the default instance are executed. A future
change will make interceptors instance specific and copy an initial set from the default instance; similar
to
axios.create() - Config is no longer cloneable - a new static method has been introduced that creates a new Config based on another
- TemplatedUri's Resolve method is more optimized to reduce garbage generation
- The "request" field and arguments in the Error classes has been renamed to "config" to better explain the difference between request objects and config objects
- Adding a new query parameter to a Resource class using the
Withmethod has its signature changed fromKeyValuePair<string, string>to the argumentsstring,stringto simplify the API.
Fixed
- Errors generated as part of a response were created as a generic error instead of a specific error
- Bug where an empty response in an error would throw an "Invalid Cast" issue and blocking error handling
- Various edge cases that would -or could- result in a null-value exception
[0.1.3] - 2024-11-13
Added
- Support for directly downloading files and returning a FileInfo object by passing the FileInfo type as a generic
Changed
- A failure to parse the JSON response would result in an error without response data, but we do want that to debug the issue, Uxios now resolves the types in a second phase, enabling us to separate this out in a future change
[0.1.2] - 2024-11-13
Added
ConsoleLoggermiddleware that will dispatch any request and response to the Debug.Log - for now internally used to verify the concept, but intended for adding a Network Inspection tool similar to chrome- Support for adding credentials to the query string by instantiating a
QueryParameterCredentialsobject and passing it to theAuthfield of aConfigobject
Fixed
RequestInterceptorwas called afterRequesthad been created - but must be before so that the interceptors can change theConfigobject, and thus influencingRequestcreation.- UnityWebRequest could not be found in QueryString.cs in WebGL builds
Changed
- Refactored
UnityWebRequestTransportto have common actions between all transports to be inTransportActions - Introduced new
InMemoryTransportfor testing purposes - Moved specialized
Responseclasses for transports intoTransportnamespace and folder
[0.1.1] - 2024-11-09
Fixed
- Using the Sprite generic to translate URLs into Sprites work now
Added
- Added a new Sample to demonstrate basic usage to tie Uxios onto a UI
- Support for authenticating with Bearer tokens when you instantiate BearerTokenCredentials and assign that to Config.Auth
Changed
- Timeout value is now in milliseconds - this value was in seconds and did not match how Axios works, or frequent uses of timeout.
[0.1.0] - 2024-11-06
Added
- Support for GET requests, including (de)serialization to and from JSON
- Support for downloading Texture2D's directly from online images
- Support for GETting byte arrays
- The Axios API was modelled and filled in for the most part
- A "Resource" class was introduced to provide a convenient API for Unity users who are not used to Web lingo
- QueryString handling is provided by a port from querystring.js - Unity WebGL does not have access to native C# functionality
- Error handling is gradually being fine-tuned to provide specific error classes when an exception happens
- Interceptors have been implemented and will now allow inspection and manipulation of the Config and Response
- Basic Authentication support is provided
- A TemplatedUri wrapper is introduced as a beta functionality