- Notifications
You must be signed in to change notification settings - Fork38.8k
Releases: spring-projects/spring-framework
v7.0.0-M9
Compare
⭐ New Features
- Align
JpaTransactionManager
default fornestedTransactionAllowed
flag#35457 - Introduce
onRetryPolicyInterruption()
callback inRetryListener
#35442 - Add DataFieldMaxValueIncrementer for SQLite#35440
- Consistent support for non-default NIO.2 FileSystems#35435
- Include exceptions for previous attempts in
RetryException
thrown for anInterruptedException
#35434 - Include current exception in log message for failed retry attempt#35433
- Remove HttpServiceClient Annotation Support#35431
- Deprecate
put(MergedContextConfiguration, ApplicationContext)
inContextCache
#35415 - ServerSentEventHttpMessageReader should process empty data lines#35412
- Make it possible to stream "application/grpc" in Spring MVC via Flux#35401
- Add createException method to ConvertibleClientHttpResponse in RestClient#35391
- Consider throwing an error if
setVersionRequired
andsetDefaultVersion
are called onApiVersionConfigurer
#35387 - Accept
maxAttempts(0)
inRetryPolicy
builder#35362 - Generate consistent validation error messages in
RetryPolicy
#35355 - Drop support for Undertow as it is not Servlet 6.1 compatible#35354
- Expose retry attempts in RetryException#35351
- RetryException#getCause should not be nullable#35332
- Refine CORS logging for non-processed requests due to no CORS configuration#35314
- Refine Jackson 3 constructors to accept only
JsonMapper
instances for JSON#35282 - Revise
StartupStep
to implementAutoCloseable
#35277 - Add compression support in JdkClientHttpRequestFactory#35225
- Add support for Micrometer context propagation in Kotlin coroutines#35185
- Add support for Forwarded By HTTP header#34683
- Update HttpStatus to align with RFC9110 where relevant#32870
ContextCache
should close evicted context before loading new context#21007
🐞 Bug Fixes
- Refine
Nullness
for Kotlin functions returningUnit
#35420 - Invalid Nullness information for Kotlin properties#35419
ApiVersionConfigurer.setVersionRequired(...)
does not result inMissingApiVersionException
#35386- RestTestClient returns null response body#35385
- Interface client methods that return InputStreams do not throw exceptions on bad HTTP status codes#35375
@Retryable
cannot be used with with@HttpServiceClient
due toNullPointerException
#35353- Wrong PathPattern parsing for segments ending in '**'#35339
RetryTemplate
should officially exposeRetryException
toRetryListener.onRetryPolicyExhaustion()
#35334- Restore mixed usage support with uri() and queryParam() for query parameters in AbstractMockHttpServletRequestBuilder.buildRequest()#35329
- Kotlinx Serialization doesn't work when using ResponseEntity#35281
- "Failed to read candidate component class" with classfile metadata reading#35252
📔 Documentation
- Docs: Rework mvc-jsp section with JavaConfig example (per review feedback)#35444
- Document programmatic retry support in the reference manual#35436
- Improve reference docs on API versioning by path#35421
- Fix typo in websocket doc#35393
- Refine null-safety tooling introduction#35383
- Fix
@HttpServiceClient
example in reference manual#35363 - Improve wording for transactional rollback rule semantics#35346
- Document semantics of
RetryException
regarding cause and suppressed exceptions#35337 - Formatting issue in RestTestClient documentation#35328
🔨 Dependency Upgrades
- Upgrade to Jackson 3.0.0-rc9 and 2.20.0#35439
- Upgrade to Jetty 12.1.0#35345
- Upgrade to Kotlin 2.2.20#35414
- Upgrade to Micrometer 1.16.0-M3#35453
- Upgrade to Reactor 2025.0.0-M7#35452
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Dongnyoung,@J-unStiN,@NeatGuyCoding,@gustaavv,@izeye,@remeio,@shakuzen, and@spicydev
Assets2
Uh oh!
There was an error while loading.Please reload this page.
v6.2.11
Compare
⭐ New Features
- Missing
@Nullable
on JsonPathAssertions.isEqualTo#35445 - Graceful fallback for non-default NIO.2 FileSystems#35443
- Avoid thread pinning in SseEmitter, ResponseBodyEmitter#35423
- Detect Informix error codes as
DuplicateKeyException
#35400 - Inconsistent nullability for
String value
arguments inResponseCookie
from*()
factory methods#35377 - Revisit
taskTerminationTimeout
semantics onSimpleAsyncTaskExecutor/Scheduler
#35372 StandardEvaluationContext.setBeanResolver
should allow@Nullable BeanResolver
#35371
🐞 Bug Fixes
- "mainThreadPrefix = null " Causing multiple background bean locks to be blocked#35409
- Annotation not found on parameter in overridden method unless method is public#35349
- Annotations on overridden methods not found in type hierarchy with unresolved generics#35342
- Performance degradation when using singleton beans with Provider#35330
- JettyClientHttpConnector buffer leak in Spring Framework 6.2#35319
- Spring application hangs on shutdown with
@Scheduled
(cron=…) when custom ScheduledExecutorService bean is defined (Java 19+)#35316
📔 Documentation
- Document potential need to use
Mockito.doXxx()
to stub a@MockitoSpyBean
#35410 - Fix links to Reactive Libraries and RestTemplate#35392
- Fix broken link in WebDriver docs#35374
- Document Web DataBinder support for RouterFunction#35367
- Improve documentation for
ApplicationEvents
to clarify recommended usage#35335 - Document terms and units in
DataSize.parse()
#35298 - Refine
@Contract
Javadoc#35285 - Correct the default value of nestedTransactionAllowed in JpaTransactionManager javadoc#35212
🔨 Dependency Upgrades
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Dockerel,@Kehrlann,@acktsap,@khj68,@ngocnhan-tran1996,@scordio, and@sgflt
Assets2
Uh oh!
There was an error while loading.Please reload this page.
v7.0.0-M8
Compare
⭐ New Features
- Only add
httpServiceProxyRegistry
bean when necessary#35307 - Introduce
@Proxyable
annotation for bean-specific proxy type#35296 - Introduce bean definition attribute for enforcing an interface-based proxy#35293
- Let Spring Boot consistently switch to CGLIB proxies for any proxy processor (including
@Retryable
,@Async
etc.)#35286 - HTTP method support in MappedInterceptor#35273
- Post process outgoing messages in JmsClient#35271
- Introduce
ConfigurableApplicationContext.pause()
andSmartLifecycle.isPauseable()
#35269 - Provide support to configure request interceptors in RestTestClient#35268
- Provide more control over validation in DefaultApiVersionStrategy#35267
- PathApiVersionResolver should not be nullable#35265
- Replace
useRequestParam
withuseQueryParam
inApiVersionConfigurer
to align with client#35263 - Add support for MediaType in ApiVersionInserter#35259
- ApiVersionConfigurer misconfiguration is hard to detect when no version resolvers are added#35256
- Support HttpServiceClient annotation#35244
- Prefer mapping without version for requests without a version#35237
- Provide
@WebSocketScope
annotation and publicSCOPE_WEBSOCKET
constant (for consistency with@RequestScope
and co)#35235 - Allow getting receipt from StompSession.Subscription.unsubscribe()#35224
- Support wildcard path elements at the start of path patterns#35213
- Improve handling of request parameter without values in MockMvc#35210
- Display original request URI in NoResourceFoundException message#34553
- Add RestTestClient#34428
- Support Hibernate StatelessSession [SPR-2495]#7184
🐞 Bug Fixes
📔 Documentation
- Document constraints for HTTP range requests#35227
🔨 Dependency Upgrades
- Upgrade to Hibernate ORM 7.1#35308
- Upgrade to Jackson 3.0.0-rc6 and 2.19.2#35228
- Upgrade to Jackson 3.0.0-rc8 and 2.20.0-rc1#35295
- Upgrade to Jetty 12.1.0.beta3#35233
- Upgrade to Micrometer 1.16.0-M2#35311
- Upgrade to Reactor 2025.0.0-M6#35310
❤️ Contributors
Thank you to all the contributors who worked on this release:
@FBibonne,@NeatGuyCoding,@SRIRAM9487,@Songdoeon,@philwebb, and@rworsnop
Assets2
Uh oh!
There was an error while loading.Please reload this page.
v6.2.10
Compare
⭐ New Features
- Optimize NIO path resolution in
PathEditor
#35304 - Make
type
inProblemDetail
nullable#35294 - Refine UriUtils#decode and StringUtils#uriDecode implementation and documentation#35253
- Provide configurable
useCaches
option forURLConnection
usage inUrlResource
(avoiding jar file leak)#35218
🐞 Bug Fixes
@Scheduled
tasks running inSimpleAsyncTaskScheduler
are interrupted immediately on context close#35254ScriptUtils.executeSqlScript()
does not support multiple results per statement#35248- Successful Autowiring Dependent on Configuration ordering and Primary Bean flag#35239
- Locale parameter in MessageSource#getMessage methods should be nullable#35230
- Allow any
@Transactional
propagation for@TransactionalEventListener
with BEFORE_COMMIT phase#35150 - Catalog name should be handled with the provided case#35064
- Accept support for generated keys column name array on HSQLDB and Derby as well#34790
- Handle direct CanncelationException on timeout in JdkClientHttpRequest#34721
📔 Documentation
- Add documentation of RequestMapping about SpEL#35232
- Document SqlBinaryValue behaviour with PostgreSQL#34786
🔨 Dependency Upgrades
❤️ Contributors
Thank you to all the contributors who worked on this release:
Assets2
Uh oh!
There was an error while loading.Please reload this page.
v7.0.0-M7
Compare
⭐ New Features
- LocalDataSourceJobStore should re-initialize statically registered Quartz ConnectionProvider on context restart#35208
- Make rootObject parameter consistently nullable#35206
- Refine multipart converter registration in HttpMessageConverters#35203
- Introduce
getSource()
inApplicationContextEvent
with covariant return type#35197 - Introduce
ContextRestartedEvent
as a subtype ofContextStartedEvent
#35194 - Align HttpMessageConverters builder with WebFlux codecs variants#35187
- Transaction-scoped resource binding in
TransactionSynchronizationManager
#35182 - Use flexible generics nullness in
RestClient.RequestHeadersSpec.ExchangeFunction
#35180 - Introduce
ConfigurableApplicationContext.restart()
method#35171 - Pause unused application contexts in the TestContext framework#35168
- Skip initialization of a
NullBean
#35165 - Short-circuit matching algorithm in
InstanceFilter
#35161 - Support direct matching against exceptions in
ExceptionTypeFilter
#35160 InstanceFilter
andExceptionTypeFilter
should setmatchIfEmpty
totrue
by default#35158- Require explicit constraints in
@Contract
#35157 - Specify fetchSize/maxRows/queryTimeout per statement in JdbcClient#35155
- Include MethodParameter[] parameters in HttpRequestValues.Processor#35148
- Deprecate
DaoSupport
classes#35145 - Remove
maxDuration
/maxElapsedTime
support fromRetryPolicy
#35144 - Introduce
@ConcurrencyLimit
annotation based onConcurrencyThrottleInterceptor
#35133 - Consistently implement
toString()
inBackOff
strategies#35120 - Support API versioning for functional endpoints#35113
- Migrate
orm.hibernate5
toorm.jpa.hibernate
package for Hibernate ORM 7.0#35111 - Redesign
RetryPolicy
to directly incorporateBackOff
#35110 - Ability to limit list of supported API versions to explicitly configured ones for Spring MVC#35105
- Refine nullability of
PropertyResolver.getProperty(key: String)
extension#35104 - Support for exposing additional object types in
SmartFactoryBean
#35101 - Add missing
@Nullable
toMethodInvoker::setArguments
parameter#35089 - Support
@RequestBody
in interface method when computing "consumes" condition#35086 - Consistent validation of supported API versions#35082
- Resolve optional HandlerMethod parameter of
@ExceptionHandler
method to null#35067 - Add ability to decorate HttpExchangeAdapter through HttpServiceProxyFactory#35059
- Introduce
Builder
API and factory methods forRetryPolicy
#35058 - Revise
RetryTemplate
for alignment with Reactor (in preparation for@Retryable
)#35057 - Add ApiVersionResolver based on parameter in media type#35050
- Support deprecation information in API versioning#35049
- Add support for configuring
SslInfo
inWebTestClient
#35042 - Make built-in
RetryPolicy
implementationsfinal
#35040 - Specify flexible generics nullness in spring-jdbc#34911
- Allow usage of
@CheckReturnValue
on types and constructors#34910 - Support repeatable writes in FormHttpMessageConverter#writeMultipart#34859
- Convert applicable methods in
Scope
todefault
methods#34757 - Add public method to get bean order#34712
- Discard further rows once maxRows has been reached#34709
- Support
DefaultWebFilterChain
allowing the current filter to provide its name explicitly#34702 - API Versioning Support#34565
- Introduce
@Retryable
AOP support (based oncore.retry
and Reactor retry functionality)#34529 - Revisit converters and codecs default setup in HTTP stacks#33894
ConfigurationBeanNameGenerator
for@Bean
-annotated methods#33448- Qualified
EntityManager
/EntityManagerFactory
injection (aligned with Jakarta Persistence 3.2)#33414 - Introduce JmsClient with customizable send/receive operations#32501
- Allow conditional handling of 404 with HTTP Interface clients#32105
- Allow to set TTL (and other QoS-related settings) on a per-message (and/or per-send) basis#26840
🐞 Bug Fixes
- Allow ordering of
HttpMessageConverters
s throughWebMvcConfigurer.configureMessageConverters(HttpMessageConverters.Builder)
#35177 - Content-Disposition response header duplicated for failed StreamingResponseBody#35116
- CachingMetadataReaderFactory does not cache all metadatareader calls#35112
sslInfo()
should return the builder forMockServerHttpRequest
#35075- HttpService group adapters could not be instantiated in a native image#35038
📔 Documentation
- Improve URLs in Validation chapter of the reference manual#35181
- Update Spring MVC message converters documentation#35166
- Add a note about Field/Method vs. TYPE_USE annotations in reference docs#35098
- Document intention of
toString()
inHandlerMethod
#35055 - Add section in docs on byte-range requests in Spring MVC and WebFlux#35052
🔨 Dependency Upgrades
- Upgrade to Jetty 12.1.0.beta1#35084
- Upgrade to Kotlin 2.2.0#34453
- Upgrade to Micrometer 1.16.0-M1#35170
- Upgrade to Reactor 2025.0.0-M5#35169
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Allan-QLB,@NeatGuyCoding,@OlgaMaciaszek,@Pankraz76,@izeye,@ngocnhan-tran1996,@quaff,@remeio,@renatomameli,@scordio, and@wonyongg
Assets2
Uh oh!
There was an error while loading.Please reload this page.
v6.2.9
Compare
⭐ New Features
OncePerRequestFilter
cannot be CGLib-proxied#35198- Consistently catch
InaccessibleObjectException
next toIllegalAccessException
#35190 - Introduce
Date
-to-Instant
andInstant
-to-Date
converters#35175 - Consistent nullability and exception declarations in
AbstractMessagingTemplate
hierarchy#35159 - Register runtime hints for
Instant
-to-Timestamp
conversion#35156 - Improve handling of
ResponseEntity<?>
in Spring MVC#35153 - Support
@CacheConfig("myCacheName")
declarations for simplified configuration#35152 - Declare
messageSelector
parameters inJmsOperations
as@Nullable
#35151 - Add getter for
OverflowStrategy
inConcurrentWebSocketSessionDecorator
#35132 - Use preset Content-Type for streaming and reactive responses in Spring MVC#35130
- Leniently tolerate null
@Aspect
bean#35074 DataAccessResourceFailureException
thrown when transaction times out on PostgreSQL#35073MethodInvokingFactoryBean
fails to invoke publicly exported methods overridden by internal classes when using JPMS#34028
🐞 Bug Fixes
- Restore preference for interface (most abstract) method in
getPubliclyAccessibleMethodIfPossible
#35189 - Make
targetBeanName
field in AbstractBeanFactoryBasedTargetSourceprotected
to avoid exceptions in logging andtoString()
#35172 - Fix inconsistencies in
StaticListableBeanFactory
#35119 - Support StreamingHttpOutputMessage in RestClient#35102
- When building
DELETE
requests, the request body is not used inJdkClientHttpRequest.buildRequest
#35068 - AOT-generated bean registration file contains "too many constants" when building with many beans#35044
- Prevent cache pollution by storing only the factories#34732
- WebFlux decodes wildcard content-types as form-data/multipart#34660
- AOT-generated CGLib proxies do not contain method overrides#34642
- 500 response for ResourceHttpRequestHandler when requested range is not satisfied#34490
📔 Documentation
- Document how to register runtime hints for convention-based conversion#35178
- Link to
@ContextConfiguration
Javadoc from reference manual#35088
🔨 Dependency Upgrades
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Meijuh,@RazorNd,@chenggwang,@izeye,@mjd507,@ngocnhan-tran1996, and@philwebb
Assets2
Uh oh!
There was an error while loading.Please reload this page.
v7.0.0-M6
Compare
⭐ New Features
- Allow
FixedBackOff
to be constructed with only a custom interval#35028 - Use String.replace in MetadataEncoder#35025
- Revise
@Nullable
declarations forcontains*()
methods inCollectionUtils
#35023 - Introduce
JacksonJsonMessageConverter.getObjectMapper()
#34963 - Remove
(String, String)
variants ofsetProperty()
andwithProperty()
fromMockEnvironment
#34948 - Allow access to
env
fromSupplierContextDsl
#34943 - Consistently declare nullability
@Contract
for core utilities#34934 - Update HttpServiceGroupConfigurer API#34926
- Make
ProblemDetailJacksonXmlMixin
compatible with Jackson 3#34925 - Introduce hints in
RestClient
API#34924 - Add Kotlin body advices#34923
- Add support for callable references to
BeanRegistrarDsl
#34922 - Additional updates for API versioning in test and client support#34919
- Define nullability
@Contract
forquote
andgetFilename
inStringUtils
#34896 - Support
@Import
on interfaces#34820 - Use HexFormat in CharacterEditor#34798
- Use HexFormat in ContentDisposition#34797
- Introduce minimal retry functionality as a core framework feature#34716
- Add support for "application/*+x-protobuf" media type#34645
- Support OutputStream and InputStream in HTTP Interface clients#32358
🐞 Bug Fixes
@Contract
forSupplierUtils.resolve(Supplier)
incorrectly declares!null -> !null
#34987- Consistent null check on injection points for pre-existing singleton beans#34952
📔 Documentation
- Refine null-safety documentation terms#34982
- Stop referring to JUnit 5 in documentation#34970
- Fix typos in API versioning#34961
- Add missing
since
attributes for@Deprecated
declarations#34942 - Improve Javadoc for
getFilename()
andgetFilenameExtension()
inStringUtils
#34932 - Add documentation for HTTP service proxy registry#34912
- Update outdated JettyHttpHandlerAdapter example in reference documentation#34877
🔨 Dependency Upgrades
- Upgrade to Jackson 3.0.0-rc5#34945
- Upgrade to Jetty 12.1.0.beta0#34930
- Upgrade to Kotlin 2.2.0-RC2#34946
- Upgrade to Micrometer 1.15.1#35019
- Upgrade to Netty v4.2.2.Final and Reactor 2025.0.0-SNAPSHOT#34996
- Upgrade to Reactor 2025.0.0-M4#34997
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Tussle0410,@doroszkiewicz,@fmbenhassine,@hgh1472,@izeye,@kilink,@kssumin,@kwondh5217,@quaff,@scottfrederick, and@violetagg
Assets2
Uh oh!
There was an error while loading.Please reload this page.
v6.2.8
Compare
⭐ New Features
- Nullability
@Contract
declaration forCodeFlow.isIntegerForNumericOp()
is unnecessary#34985 - Serializer hint registration is broken for some Kotlin classes#34979
- Clients created using JdkClientHttpRequestFactory set content-length for GET, DELETE and HEAD requests#34971
- Support registration of non-public
BeanDefinitionReader
via@ImportResource
#34928 - Make max size for pattern cache in
PathPatternMatchableHandlerMapping
configurable#34918 - Add optimized DataBufferInputStream overrides#34799
🐞 Bug Fixes
- Encode non-printable character in Content-Disposition parameter#35034
- Allow update of existing
WebSession
after max sessions limit is reached#35013 - Fix support for collections in
AbstractKotlinSerializationHttpMessageConverter
#34992 - PathPattern#combine throws StringIndexOutOfBoundsException#34986
- Fix AOT code generation for autowired inner class constructor#34974
- AbstractFileResolvingResource.exists closes JAR resource input streams with v6.2.7#34955
- Enhanced configuration class fails to call package-visible superclass constructor on WebSphere#34950
- Fix
REPLY_CHANNEL
header check inMessageHeaderAccessor
#34949 MockEnvironment
does not acceptObject
property values#34947PropertySourcesPlaceholderConfigurer
no longer usesConversionService
fromEnvironment
#34936@Contract
forStreamUtils.drain()
incorrectly declaresnull
results in an exception#34933- Inconsistent behavior injecting null
@Bean
factory parameter#34929 - MockHttpServletRequest.addHeader duplicates "Content-Type" header#34913
- BeanUtils.getParameterNames fails for Kotlin data classes#34760
- JAXB message converters ignore Content-Type charset#34745
- Aspect Not Triggered After Restart in Spring Boot 3.4.x (But Works in 3.3.10)#34735
- Add caching headers to unmodified static resources#34614
📔 Documentation
- Applygh-34856 to MockClientHttpRequest in testfixture package#35031
- Fix
ResourceHttpRequestHandler#setHeaders
JavaDoc#35004 - Remove reference to AspectJ Eclipse Javadoc#35000
- Mention CompletableFuture in Spring MVC "Asynchronous Requests" section of reference manual#34991
- Fix exception name in ModelAttribute docs#34980
- Fix syntax in
@SqlGroup
example#34972 - Update X-Forwarded-Proto doc to say https / http#34959
- Update Guidance on Best Practices To Test Code That Uses RestClient and RestTemplate#34892
- Add a section for WebAsyncTask in mvc-ann-async.adoc#34885
- Clarify what
@RestControllerAdvice
vs@ControllerAdvice
apply to by default#34866 - Improve Javadoc for
@ExceptionHandler
#34554
🔨 Dependency Upgrades
- Upgrade to HttpComponents HttpClient 5.5#34941
- Upgrade to Micrometer 1.14.8#35020
- Upgrade to Reactor 2024.0.7#35021
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Allan-QLB,@Aurh1l,@BowieDu,@DhruvTheDev1,@Dongnyoung,@JimmyAx,@addoDev,@dmitrysulman,@izeye,@jjank,@kilink,@mbazos,@msnsaeed71,@ngocnhan-tran1996,@nosan,@remeio,@vpavic, and@yuzawa-san
Assets2
Uh oh!
There was an error while loading.Please reload this page.
v6.1.21
Compare
🐞 Bug Fixes
- Encode non-printable character in Content-Disposition parameter#35035
- Allow update of existing
WebSession
after max sessions limit is reached#35018 - Enhanced configuration class fails to call package-visible superclass constructor on WebSphere#34951
🔨 Dependency Upgrades
- Upgrade to Reactor 2023.0.19#35022
Assets2
Uh oh!
There was an error while loading.Please reload this page.
v7.0.0-M5
Compare
⭐ New Features
- Deprecate
PropertyPlaceholderConfigurer
andPreferencesPlaceholderConfigurer
for removal#34880 - Add Consumer based variant methods to HttpRequestValues builder#34870
- Add defaultApiVersion to RestClient and WebClient builders#34857
- Evaluate system properties in default HttpClient in ReactorClientHttpRequestFactory#34850
- Use beanClassLoader in the HTTP Service Registrar#34846
- Deprecate JUnit 4 support in the Spring TestContext Framework#34794
- Ability to validate supported API versions only against explicitly configured ones#34775
- Revisit Jackson support#33798
🐞 Bug Fixes
ClassFileAnnotationMetadata.fromTypeDescriptor(…)
fails on Java 24#34882- Align ClassFileClassMetadata with other implementations#34869
- Incorrect filtering of groups with HttpServiceGroupConfigurer#34867
- Aggregated Javadoc no longer published since 7.0.0-M4#34774
📔 Documentation
- Add Reference Documentation for API Versioning#34569
🔨 Dependency Upgrades
- Upgrade to Kotlin 2.1.21#34900
- Upgrade to Micrometer 1.15.0#34888
- Upgrade to Reactor 2025.0.0-M3#34897
❤️ Contributors
Thank you to all the contributors who worked on this release:
Assets2
Uh oh!
There was an error while loading.Please reload this page.