https://kotlinlang.org logo
Join Slack
Powered by
# store
  • b

    blakelee

    10/25/2024, 6:12 PM
    I'm looking for some recommendations. I'm doing a
    store.fresh
    and I put in a
    Key.Read
    similar to how the example shows it with a
    NotesKey
    . However in the example it has this line
    require(key is NotesKey.Write)
    but when I call
    store.fresh
    it hits the writer and throws an exception because it's expecting only
    Key.Write
    . I guess what I'm wondering is, is there a case where the example is right? Or should I be expected to handle all sorts of keys in my source of truth for the writer?
    store.fresh
    create a read request which is why I wasn't expecting the write The example I was referencing above
    m
    • 2
    • 3
  • m

    Matthew Ramotar

    10/28/2024, 6:20 AM
    Hey all, Sharing an early version of revised Store 5 docs with this channel. It’s still a work in progress. Will be adding more content as time permits. Please continue to surface errors, inconsistencies, or areas that are hard to understand - your feedback is very much appreciated. We’ll be moving to a Mobile Native Foundation namespace soon. In the meantime, you can check out the docs here: store.mattramotar.dev
  • m

    Matthew Ramotar

    10/28/2024, 6:21 AM
    Hey all, Sharing an early version of revised Store 5 docs with this channel. It’s still a work in progress. Will be adding more content as time permits. Please continue to surface errors, inconsistencies, or areas that are hard to understand - your feedback is very much appreciated. We’ll be moving to a Mobile Native Foundation namespace soon. In the meantime, you can check out the docs here: https://store.mattramotar.dev
    🙌 1
    b
    y
    • 3
    • 2
  • m

    Matthew Ramotar

    10/28/2024, 3:00 PM
    More documentation updates: • Sample app demonstrates
    Store
    and
    MutableStore
    in a
    Circuit
    architecture with other modern Kotlin libs such as
    SqlDelight
    ,
    Ktor
    ,
    kotlin-inject
    • Quickstart completed • Fetcher explanation completed
    🎉 3
  • b

    blakelee

    10/28/2024, 5:08 PM
    Since feedback is welcome: • Documentation for
    Validator
    , I haven't really found a use for it yet. Should we be making server calls with this if we're trying to keep client/server in sync? • It was a bit unclear what
    store.clear
    does and realized that it only clears for the SoT doesn't do anything with the fetcher. So if you want to sync client and server you'd still need a write request. • Understanding error handling. Where should try/catches be implemented? I think the assumption is that any failures are handled upstream by store and you'll get a nice
    StoreReadResponse.Error
    • Adding
    Input
    ,
    Output
    ,
    Local
    ,
    Network
    and
    Response
    docs wherever those are used. I tend to get them jumbled up so look to other areas where they are documented to properly use them. Just having a blanket
    Local
    is your SoT object everywhere the
    Local
    type is used would be helpful -- for each type. • When to use bookkeeper. It seems helpful for pulling data from the client, but not if we want to keep client/server in sync. So the usecase seems more for a feed rather than sync. So far with the Trails and Howl examples along with the droidcon videos and documentation I was able to piece it together. Another piece of feedback is that the name of it is very generic which makes searching for help on Google more difficult so I have to specify mobilenativefoundation with my search in order to get relevant information. Overall though, thanks for creating and open sourcing this library. I'm not trying to dog all of your efforts, this is a cool library and I'm happy I'm able to use it to solve some of my issues.
    🙌 1
    m
    • 2
    • 6
  • j

    Jeffrey Dawes

    10/29/2024, 4:04 PM
    Hey everyone, just dipping my toes into Store5 and wondering what pattern most people follow when it comes to writing Repository interfaces. I see some examples where people leverage
    StoreResponse
    as their returns types and others where they use their own types. In this case, I'm specifically curious about
    Flow
    return types. What is the guidance on this topic, if any? I was planning to map the
    StoreResponse
    to my
    Result
    type class to simplify since it only has a loading, success, and error state. But then I would lose the nice things like the response origin. What has been other people's experience with this? Do you commit to exposing
    Store
    classes from your repositories or do you map to a similar or identical local class?
    m
    b
    • 3
    • 6
  • j

    Jeffrey Dawes

    11/01/2024, 4:03 PM
    Copy code
    interface Fetcher<Key : Any, Network : Any>
    Because
    Network
    is non-null how do we represent a value that does not exist or is not found? Do you wrap the response in a result type? Do you return a
    Fetcher.Error
    of some kind?
    b
    • 2
    • 1
  • m

    Matthew Ramotar

    11/05/2024, 5:33 PM
    Hey all, just published a two-part guide on handling CRUD operations with Store. Lmk what you think
    m
    b
    • 3
    • 7
  • m

    Matthew Ramotar

    11/13/2024, 8:32 PM
    Docs are now here! https://store.mobilenativefoundation.org
    👀 2
    kodee happy 5
    🎉 3
    kodee loving 2
    r
    • 2
    • 6
  • m

    Matthew Ramotar

    11/24/2024, 7:30 PM
    Hey all - New decision guide: https://store.mobilenativefoundation.org/docs/best-practices/store5/single-or-multiple-stores. It’s motivated by this Q&A opened up a few days ago: https://github.com/MobileNativeFoundation/Store/discussions/675. These sorts of questions are important for the library and community. Sharing the guide here and want to express that we really appreciate contributions of any kind - whether it’s code changes, bug reports, feature requests, proposals, or questions. Please keep asking questions, raising issues, and starting discussions. And if you’re interested in getting more involved with the development of Store, don’t hesitate to DM me directly. We would love to have you join us
  • r

    rocketraman

    11/26/2024, 2:43 PM
    Is there an example somewhere of implementing conflict resolution with Store5? The docs say that the Mutable Store "Conflict Resolution: Works with the Bookkeeper and Updater to resolve conflicts that arise from concrruent modifications or offline changes.". However, its unclear to me how it does this? I'm not seeing the relevant API surface. I want to implement a conflict resolution mechanism that combines data from the conflicted entities to create a new entity.
    m
    • 2
    • 9
  • a

    amitkma

    01/11/2025, 4:56 PM
    When is stable version 5.1.0 supposed to be released? Pardon me if it's already been discussed or shared. Couldn't find it.
    👀 1
    m
    a
    • 3
    • 5
  • s

    Simone

    02/19/2025, 7:47 PM
    Hi there! Enjoying a lot the new documentation. One question, there is any workaround for this issue? If I’m not missing anything, multi-device support in my app should be impossible at the moment
    m
    • 2
    • 6
  • b

    blakelee

    02/21/2025, 5:54 PM
    How might we use store to keep a server in sync with the client -- more specifically handling deleted data on the server? The bookkeeper keeps tracks of syncs which maybe could be used to determine an item was deleted since the server wouldn't give it any data. I was thinking of an approach of sending up all of the id's and keeping a graveyard of those id's on the server to look up against. It seems like store5 gets me just shy of all the way there for being able to do this. This is something I've never implemented and due to this I've found it hard to even find solutions from searching because I'm likely not searching the right things. Perhaps articles or your experience might help. Conflict strategy is hard 🙂
    m
    g
    p
    • 4
    • 13
  • a

    André Thiele

    02/27/2025, 8:55 AM
    also, is it possible to set up a milestone maven repository? i see the pipeline publishes artifacts
    m
    • 2
    • 2
  • a

    André Thiele

    02/27/2025, 8:55 AM
    @Matthew Ramotar
  • m

    Matthew Ramotar

    02/27/2025, 2:17 PM
    Hi all - 5.1.0-alpha06 is out. Thanks to @blakelee and Roman for contributions and @Shabinder Singh for surfacing the deadlock in eager conflict resolution. This is the last planned alpha for 5.1.0. Targeting 5.1.0-beta01 in ~1 week and then 5.1.0 stable ~2-3 weeks after if no issues. Please keep surfacing issues, questions, requests. Thanks all 🙏 https://github.com/MobileNativeFoundation/Store/releases/tag/5.1.0-alpha06
    🤝 1
    ❤️ 3
    a
    • 2
    • 2
  • m

    Matthew Ramotar

    02/27/2025, 2:18 PM
    Hey, this is a relevant discussion: https://kotlinlang.slack.com/archives/C06007Z01HU/p1730218067633409?thread_ts=1730217896.818949&amp;cid=C06007Z01HU
    a
    • 2
    • 4
  • m

    Matthew Ramotar

    02/27/2025, 2:20 PM
    Do you have a sample I can look at?
    a
    t
    • 3
    • 17
  • f

    F

    03/16/2025, 12:13 PM
    Hi all, loving the library. I have a kmp chat application with supabase as a backend. I query messages with pagination and have a realtime listener for new/updated messages. I am having trouble of implementing paging with store while updating the SOT with new messages. Any sample with storex paging and/or combining of realtime updates? Thanks for all the hardwork @Matthew Ramotar
    m
    • 2
    • 1
  • b

    blakelee

    03/21/2025, 11:54 PM
    What should the expected behavior be for
    StoreReadRequest.cached(key, refresh = true)
    ? I figured it would hit my SoT first then try to refresh. However without a network connection it fails to return any data — even the SoT data
    m
    • 2
    • 3
  • a

    André Thiele

    04/01/2025, 6:12 AM
    Is it a common pattern to use something like sealed interfaces as keys? i want to be able to fetch all items using a key like Operation.GetAll which will then write all objects to the cache, but also be able to get a single object from the cache afterwards if i need to. Or is this not supported?
    m
    • 2
    • 6
  • s

    Stew Boling

    04/14/2025, 7:26 PM
    Looking for feedback on if my use case is supported by StoreX paging: I have data from three sources I need to combine into one coherent collection. The key for each entry will be timestamped with an Instant 2 of the data sources are from a WebSocket and need to be appended to the collection and the third source is an endpoint that I need to query for paginated data as the user scrolls backwards in time. Would the correct way to implement this with Store and Paging be: • Create a mutable store ◦ The two Websocket data sources would write their data to store as it comes in • Pass that MutableStore to the PagingBuilder and implement backwards pagination following the normal patterns. Will Paging get notified of the data added by the WebSocket correctly? Thanks 🙂
    • 1
    • 1
  • v

    vovkab

    04/29/2025, 7:00 PM
    Hi all, we are using store4 and trying to update to kotlin2. Looks like store4 is still using experimental/deprecated api's (stable since 1.5), and if we try to use it with kotlin2 it would crash in runtime:
    Copy code
    Caused by: java.lang.NoSuchMethodError: No virtual method hours-UwyO8pc(I)J in class Lkotlin/time/Duration$Companion;
    	at com.dropbox.android.external.store4.StoreDefaults.<clinit>(StoreDefaults.kt:14)
    	at com.dropbox.android.external.store4.RealStoreBuilder.<init>(StoreBuilder.kt:86)
    We are trying to stay on store4 so we don't have to retest everything at the same time. Is it possible to do a quick hot fix release for store4? I've created a change to switch to a stable api and remove experimental time: https://github.com/vovkab/Store/commit/1af730553be7133e71736758dc8c67e2922b3fc3 But I'm not sure against which branch should I created a PR? As I can see there is
    release/4.0.0
    branch, but it's missing everything all the way up to 4.0.7? Thanks.
    j
    • 2
    • 1
  • p

    Pranathi

    05/08/2025, 4:06 AM
    hi all, I am currently working on a data collection app. where user has to fill data in a series of screens and at the last screen we are supposed to make an api call. So we have decided on using viewmodel per screen architecture since we use the same screens for the edit flow as well and store the data filled my user to the Local DB before they move to next screen(This decision is made because we saw significant users facing process death). If I can keep this simple I have drafts in my localDB which I update at the end of each screen which has only LocalID and not serverID. Though currently we are not actually going for offline support but that is definitely in pipeline so I am looking into store. But I am not sure if store fits to our usecase and if yes how to manage two different keys
  • j

    Jan-Patrick

    07/03/2025, 6:35 AM
    Hi everyone, we’re considering using Store5 as the main caching solution in our Kotlin Multiplatform project. I really like the structure and flexibility it offers, but I’m a bit concerned about the current activity level in the repo. Does it still make sense to rely on Store5 for a long-term project? I’m especially worried about future compatibility with new Kotlin versions if maintenance slows down.
  • s

    svt ttytth

    07/05/2025, 10:57 PM
    I have the same concern about the compatibility too
  • t

    Tepes Lucian Victor

    07/07/2025, 7:20 PM
    I've integrated store5 last year in an android project and haven't run into any issues. Can't speak for KMP though
  • m

    Manuel Lorenzo

    07/09/2025, 1:36 PM
    hello! I'm creating a new app and I want to use RevenueCat paywalls. However I need to facilitate Google Play store a way to test the whole app, bypassing the paywalls and I'm not sure how to do this 🤔
    c
    • 2
    • 2
  • m

    Matthew Ramotar

    07/20/2025, 11:10 PM
    Hey all - Hope everyone’s well. Sorry to be slow. Extremely busy few months. A few things • Re concerns about activity - Activity has been minimal as Store 5.0 has been stable. I’m working on a fix for the recent breaking change to Kotlinx datetime • Re concerns about long-term project - Store will turn 9 years old this November! It has survived multiple ownership transfers. It has been contributed to by hundreds of developers across dozens of companies. It is trusted in prod at the largest possible scale • There are ongoing discussions about new features and other API improvements but enhancements in general will be slower without additional help. Please reach out if you want to get involved Thank you 🙏
    👍 5
    👍🏻 1