- Even faster library! PICS chunk processing is now faster, decreasing initial startup time even more.
- Supercharged library queries! For UI display reasons, you might not need to query ALL the data from applications.
-
- Now, kSteam adds a
full
argument to most of the methods inLibrary
that can skip extra information.
- Now, kSteam adds a
-
- kSteam Library Queries got new parameters:
alwaysFetchLicenses
,alwaysFetchPlayTime
andfetchFullInformation
. All of them are false by default.
- kSteam Library Queries got new parameters:
-
fetchFullInformation
orfull
set to false will skip querying the following metadata: content descriptors, tags, categories, localized assets, developers, publishers and franchises
- Improved PICS Database! With new fields included in SQLite tables, kSteam does no longer store any VDF at all, greatly improving update speeds and reducing database sizes.
SteamApplication
: Content Descriptors are now parsed properlyLibrary
: SQL query building is fixed for some collections and simple requestsLibrary
: AddedKsLibraryQuerySortBy.NormalizedName
for sorting based onsortas
field in AppInfo with fallback to regular names
- Rewritten network communication! Inspired by job system in other Steam Network clients, the CMJob system in kSteam allows for more streamlined experience and better stability when working with the Steam Network.
-
- kSteam also introduces Streaming CM Jobs, which allow for processing every received part of a multi-message job, instead of collecting to List first. This really helps with PICS, where this new method greatly reduces memory usage on updates.
- Major PICS rewrite! The whole database is now powered by Room (SQLite ORM by Google), which enables following things:
-
- Kotlin 2.1 support and beyond (Realm is currently "frozen")
-
- More platforms supported (kSteam still primarily supports only JVM + Android)
-
- Rewritten startup sequence, which should be more accurate in multi-user environments
-
- A lot of internal DB objects were rewritten from scratch to improve performance and decrease memory usage
- Jetpack Compose bindings removed. Refer to
Jetpack Compose
section on README on how to improve stability when using kSteam models in@Composable
. - Synchronized Protobuf files and dependencies.
UserNews
: statuses supportAccount
: IP fetching is now on separate thread to "fix" NetworkOnMainThreadException on Android
- kSteam Library Queries! This all-new system interops with Steam Library Collections (while adding new filters), allowing to fetch user's game library with play time and license support.
- Multi-license support! Now kSteam understands package licenses and can apply them to app queries - you can easily get information about multiple copies and who own them.
- [breaking change]:
ExtendedSteamClient
now implements the new abstractSteamClient
interface, while the oldSteamClient
is now internal and namedSteamClientImpl
. - [breaking change]:
extension-client/published-files
: all-newPublishedFile
class that features more mapped variables and improved code style - [breaking change]:
core
: gRPC clientauthenticationClient
renamed toauthentication
core
: move gRPC clients fromextension-client
'sExtendedSteamGrpcClients
toSteamGrpcClients
extension-client/published-files
: implementedgetFilesAppList
andgetFiles
extension-client/published-files
: implementedEPublishedFileInfoMatchingFileType
andEWorkshopFileType
enumsproto-common
: merge protobuf files fromcore
andextension-client
extension-client
: implementedClientCommunication
for remote operationscore
: addClientCommService
,FamilyGroupsService
,GameNotesService
,StoreService
,MobileDeviceService
,UserGameNotesService
toSteamGrpcClients
proto-common
: update to latest protobufsproto-common
: don't embed .proto files in JAR
- [breaking change]
extension-client/guard
:getActiveSessions
now returns anActiveSessions
object that separates current kSteam session and others - [breaking change]
extension-client
: implemented separate databases, "ks_shared.realm" for PICS and "ks_.realm" for user-specific items (personas, for example) - [breaking change]
extension-client
:Persona
is now rebuilt, featuring built-in relationship indicator and newStatus
interface - [breaking change]
core
:trySignInSaved
is now separated intotrySignInSaved(SteamId)
andtrySignInSavedDefault()
core
,extension-client/guard
: replacedwhile (true)
in flows withwhile (currentCoroutineContext().isActive)
extension-client/guard
: fixed generation of revocation signaturecore
: addAccount.getWebCookies
for fetching required cookies to access secured Steam pages in a WebViewextension-client/guard
: makeMobileConfirmationItem.icon
nullable to fix parsing when a confirmation does not have it (phone number changes)дcore-persistence
: addsecureGetSteamIds
and improvesecureContainsIdentity
core
: implemented support for expired sessionscore
: implemented auto-restoration of autologinextension-client
: implemented new rich presence formatter that automatically updates the databaseextension-client
: provideSteamRegexes
to help QR scanning implementations
- [breaking change]
core
: handler system was removed out in favour for static injection of subsystems - [breaking change]
extension-client
: due to handler system being removed, extension is now installed as a Kotlin extension forSteamClient
(seeextendToClient
function) - [breaking change]
extension-client/guard-management
:AwaitingSession
is nowIncomingSession
- [breaking change]
extension-client/guard-management
:IncomingSession
andActiveSession
are nowSerializable
- [breaking change]
extension-client/guard-management
: reworked API to be more consistent - [breaking change]
extension-client/guard
: major refactor of creation/moving process, removing the state system core
: implement shared gRPC client storagecore
: streamlined coroutines scope creation/usagecore
: remove embedded libdeflate for native platforms multi-message support because Okio has support for gzip streams for K/Ncore
: improved performance by using an enum cache forEMsg
andEResult
extension-client
: implement shared gRPC client storage for easy invoking of supported autogenerated RPC interfacesextension-client/guard
: fixed generating signature for revoking sessionsextension-client/guard-management
: added a method to revoke current session- update dependencies
core/account
now tries to search Steam Guard code for all bound extensions- [breaking change]
extension-client
handler extensions for PICS/Library/Guard are now moved back tobruhcollective.itaysonlab.ksteam.handlers
package
Literally everything here is changed, more like a rewrite from scratch, leaving ~25% of original codebase
- [breaking change] massive persistence rework, saved storage from earlier kSteam versions IS NOT COMPATIBLE (including Steam Guard)
- re-enable support for macOS/iOS compilation
- [breaking change] massive rework of extension architecture, simplifying everything to "core"-"implementation" model
- [breaking change] introduce
core-persistence
for managing saved user data core/unifiedmessages
: provide a custom Wire client implementation for simplifying API requests- [breaking change]
core/account
: now uses secure persistence extension-client
: introduce Realm Mobile Database for persisting personas, collections, game metadataextension-client/persona
: optimize flows by using Realm queries- [breaking change]
extension-client/pics
: key-value DB is not required anymore - [breaking change]
extension-client/pics
: massive rework of querying, caching and storing to minimize extra requests extension-client/guard
: now uses secure persistence
- [breaking change] Disable support for macOS/iOS compilation, effectively making kSteam a JVM/Android-only library
- [breaking change] RPC calls now use Wire's gRPC custom client implementation instead of manually passing request/response adapters. This also enables usage of Steam-defined services directly.
extension-pics
: support for 64-bit app IDs, making the client not crashing if providing folders with non-Steam applications- update dependencies
- streamline the version updating procedure by introducing version catalogs
- synchronized protobufs with the latest provided by Steam
- Matches Cobalt
1.0-prototype
build
extension-core/news
: implementgetUpcomingEvents
andgetUpcomingEvents
extension-core/news
: extract friend activity toUserNews
handlerextension-core/news
: reworkActivityFeedEntry
to be more UI-compliantextension-core/news
: other fixes and improvementscore/webapi
: reworked API wrappers to be more modern and Kotlin-friendly- rewrite logging transport, now message value computation is done lazily (and is more likely to be removed by R8/Proguard)
- streamline build process
- provide
android
artifacts as well, with Compose stability bindings and logcat output
- [breaking change] redone
CMClientState
featuring newAwaitingAuthorization
state (connected as a guest) and renamedLogging
toAuthorizing
+Idle
toOffline
core
: improvedCMClientState
exposingcore
: introduceextractAccountIdFromSteam
andtoSteamId
extensions forLong
andInt
core
: fixed rare Web API call crashcore/player
: makegetAchievementsProgress
andgetTopAchievements
public (proto API only for now)extension-pics
: optimized database lists, fixingCallbackSuspendableMap must be initialized first!
crashextension-core/news
: finalized parameters forgetUserNews
, introducedUserNewsFilterScenario
extension-core/news
- updated
kotlin
from1.8.20
to1.8.21
- updated
kotlinx-coroutines
from1.7.0-RC
to1.7.1
- updated
kotlinx-serialization
from1.5.0
to1.5.1
- updated
wire
from4.6.0
to4.7.2
- updated
ktor
from2.3.0
to2.3.1
- [breaking change] updated
wire
from 4.5.3 to 4.6.0 (library consumers must also updatewire
to avoid issues) - [breaking change]
extension-pics
: fixed JSON exception when Steam can give absolutely random order values for collections (Int
->Double
) core
: redone sign in process to extract Steam ID from JWT token (fixes QR login - btw I think that there is an easier way to know SteamID in QR logins...)- synchronized protobufs
- updated
ktor
,kotlinx-serialization
andcoroutines
- [breaking change] Kotlin Multiplatform support for
jvm
,ios
(arm64/simulatorArm64/x64),tvos
(arm64/simulatorArm64/x64) andmacos
(arm64/x64) - [breaking change]
core
:rootFolder
is replaced fromFile
of JVM toPath
of okio - [breaking change]
core
,extension-core
,extension-guard
,extension-pics
: removed AndroidX @Immutable/@Stable annotations from models, this will lead to recomposition issues if used directly in Jetpack Compose (wrap them in UI state objects) - [breaking change]
extension-guard
: migrated from custom protobuf to .mafile-style JSON files (migration tools are provided in a separate module namedextension-guard-proto-migration
) - [breaking change]
core
:ktorProxyConfig
removed in favor of specifying your own KtorHttpClient
usingktor { }
function inkSteam { }
initializator core
: refactored a lot of internal I/O-related codecore
: addedSteamClientConfiguration.AuthPrivateIpLogic.Generate
option for signing in (enabled by default on Apple platforms)extension-guard
: rewritten java.nio/javax.crypto (bytebuffer/hmac) usages with okioextension-pics
: collections are now filtered based on actual owned appidsextension-pics
: optimize metadata updating- replaced
implementation
withapi
inside kSteam modules to preventClassNotFoundException