Scout

[![CI](https://github.com/kasianov-mikhail/scout/actions/workflows/ci.yml/badge.svg)](https://github.com/kasianov-mikhail/scout/actions/workflows/ci.yml) [![Release](https://img.shields.io/github/v/release/kasianov-mikhail/scout)](https://github.com/kasianov-mikhail/scout/releases) ![Swift 6.0](https://img.shields.io/badge/Swift-6.0-orange) ![Platform](https://img.shields.io/badge/platform-iOS%2016%2B-blue) [![License](https://img.shields.io/badge/license-MIT-blue)](LICENSE) ## Description Scout is an iOS logging and analytics framework backed by CloudKit. It collects structured logs, metrics, and crash reports from your app and syncs them to a public CloudKit database where you can inspect them through a built-in SwiftUI dashboard. ## Table of Contents - [Features](#features) - [Comparison](#comparison) - [Installation](#installation) - [Dashboard](#dashboard) - [Roadmap](#roadmap) - [License](#license) ## Features | | | | |:-:|-|-| | 📝 | **Structured Logging** | Integrates with [swift-log](https://github.com/apple/swift-log). All log levels, labels, and metadata are persisted and synced automatically. | | 📊 | **Metrics** | Integrates with [swift-metrics](https://github.com/apple/swift-metrics). Counters, timers, and floating-point counters are recorded alongside logs. | | 💥 | **Crash Reporting** | Captures uncaught exceptions and signals (SIGABRT, SIGSEGV, etc.) with stack traces. Reports are flushed on the next launch. | | ☁️ | **CloudKit Sync** | All data is stored locally with Core Data and synced to a public [CloudKit](https://developer.apple.com/icloud/cloudkit/) database. No custom backend required. | | 🌐 | **Multiple Backends** | Sync to CloudKit, to one or more self-hosted [Scout servers](https://github.com/kasianov-mikhail/scout-server), or to any combination of them at once. | | 📱 | **SwiftUI Dashboard** | A built-in dashboard with charts, event lists, crash details, and activity tracking for debugging in development builds. | ## Comparison How Scout compares to a hosted analytics SDK and to rolling your own backend:
Scout (CloudKit) Firebase Custom backend
Cost Free
Free within CloudKit's limits — no servers to pay for, and the quota grows with your app
Metered
Free tier, then metered Blaze billing as reads and traffic grow

Paid
Servers, database, and bandwidth billed from day one

Data privacy Private
Data stays in your own CloudKit container on Apple's infrastructure — no third-party analytics vendor
Vendor-owned
Data lives on Google's servers and can be linked across its ad and analytics products
Your responsibility
You control everything — and carry all the responsibility for securing it

Infrastructure Serverless
Zero servers — Apple runs the backend
Managed
Managed by Google, with vendor lock-in
Self-hosted
You deploy and maintain it yourself
Scaling Automatic
Automatic, within the container quota
Metered
Automatic, but the bill scales too
Manual
Manual — you provision and pay for capacity
Setup Built-in
Already included with your Apple Developer account
Setup needed
New project, SDK, and API keys
Build it
Build the API, schema, and deployment
## Installation To add the package and set up CloudKit, see the [Installation Guide](docs/INSTALLATION.md). ## Dashboard The built-in SwiftUI dashboard lets you inspect logs, metrics, and crash reports right inside your development builds — browse charts, drill into event lists and crash details, and track activity over time without leaving the app. It ships as a separate `ScoutUI` product, so you decide which builds carry it. See the [Dashboard Guide](docs/DASHBOARD.md) for linking it, presenting it, and keeping it out of the App Store build.

Home  Event  Retention

Crash  Metric distribution  Release health

## Roadmap - [ ] **Hosted Scout** *(in progress)* — a managed [scout-server](https://github.com/kasianov-mikhail/scout-server) instance - [ ] **AI tools** — an MCP server over the Scout backend - [ ] **More platforms** — macOS, watchOS, tvOS, and visionOS - [ ] **OpenTelemetry** — [OTLP](https://opentelemetry.io) support in both directions Have an idea, or want one of these sooner? Open an [issue](https://github.com/kasianov-mikhail/scout/issues). ## License Scout is released under the MIT License. See [LICENSE](LICENSE) for details.