Skip to content

Data flow

~/.aws/config ─────────────────────────────────┐
~/.aws/sso/cache/*.json                         │
~/.aws/cli/cache/*.json                         │
{platform config dir}/mimic/config.json          │

                                        Rust scan_profiles()
                                        Rust load_app_config()

                                    ┌──────────┴──────────┐
                                    │                     │
                              CloudProfile[]          AppConfig
                                    │                     │
                                    └──────────┬──────────┘

                                     mergeProfiles()
                                     (src/lib/mergeProfiles.ts)


                                       ProfileViewModel[]

                                    ┌──────────┴──────────┐
                                    │                     │
                              filterProfiles()     useMemo
                              sortProfiles()       (derived)
                                    │                     │
                                    └──────────┬──────────┘

                                         React UI

User edits metadata ──► debounced save (400ms) ──► Rust save_app_config()


                                    {platform config dir}/mimic/config.json

Key files

FileRole
src/lib/mergeProfiles.tsSingle source of truth - merges AWS profiles with Mimic metadata, derives auth state
src/stores/profiles.tsZustand store: raw profiles, scan, sync, auth operations
src/stores/appConfig.tsZustand store: config load, metadata CRUD, preferences, debounced save
src/lib/ipc.tsTauri invoke wrappers with mock fallback for browser preview

Scan cycle

  1. Rust reads ~/.aws/config (INI parser, no dependencies)
  2. Rust reads SSO cache (~/.aws/sso/cache/*.json) for auth_expires_at
  3. Rust reads STS cache (~/.aws/cli/cache/*.json) for credential_expires_at
  4. Results returned as CloudProfile[] over Tauri IPC
  5. Frontend merges with AppConfig metadata via mergeProfiles()
  6. UI derives filtered/sorted views

Save cycle

  1. User edits metadata (label, tags, notes, star, hide, reorder)
  2. Debounced (400ms) save to Rust via saveAppConfig
  3. Rust writes to config file in platform config dir
  4. File watcher on ~/.aws/config triggers profile re-scan
  5. wasRecentlySaved() guard prevents immediate re-read of self-written config