# Introduction

**URL:** https://heroiclabs.com/docs/satori/concepts/introduction/
**Summary:** Satori is the all-in-one LiveOps solution from Heroic Labs, designed to help game studios gain valuable insights into their player base and identify actionable opportunities to grow their audience and revenue.
**Keywords:** satori, liveops, liveops platform, game analytics, player segmentation, feature flags, A/B testing, remote configuration, live events, player engagement, game monetization, retention, player properties, audience segmentation, experiments, personalization, mobile game analytics
**Categories:** satori, introduction, concepts

---


# Introduction to Satori

A live game generates signals continuously. Running LiveOps at scale comes down to solving four problems: targeting the right players with the right content at the right moment; escaping the operational drag of a fragile stack of stitched-together tools; moving at the speed of player behaviour shifts with live updates; and knowing with confidence which changes are actually moving your metrics.

These four capabilities are what Satori is built to deliver: precise lifecycle intervention, a unified operational platform, real-time configuration, and evidence-based iteration. 

Satori is the LiveOps platform from Heroic Labs, giving game studios a single place to understand their players, deliver live content at scale, and personalise every experience. The mental model behind Satori is simple: events → player properties → audiences → personalized experience.

Satori has three main interfaces:
1. A browser-based console your LiveOps team uses. All operations (configuring events, adjusting targeting, reading results) are fully managed via the console with no engineering involvement.
2. A [client SDK](../../client-libraries/) your engineering team integrates.
3. A [console API](../../console/) for server-to-server communication, letting you manage Satori configuration programmatically.


## Key capabilities

<style>
.satori-cap-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:14px; margin:24px 0; }
.satori-cap-card { border:1px solid #d1cdf8; border-radius:8px; text-decoration:none; display:flex; flex-direction:column; overflow:hidden; transition:box-shadow 0.15s ease; }
.satori-cap-card .cap-body-wrap { flex:1; }
.satori-cap-card:hover { box-shadow:0 4px 12px rgba(107,89,238,0.18); text-decoration:none; }
.satori-cap-card:hover * { text-decoration:none; }
.satori-cap-card .cap-header { background:#6b59ee; padding:12px 16px; text-align:center; }
.satori-cap-card .cap-title { font-size:13px; font-weight:600; color:#ffffff; margin:0; text-decoration:none; }
.satori-cap-card .cap-body-wrap { background:#ffffff; padding:16px; transition:background 0.15s ease; }
.satori-cap-card:hover .cap-body-wrap { background:#f4f4fd; }
.satori-cap-card .cap-body { font-size:13px; font-weight:400; color:#0D0B1A; line-height:1.6; margin:0; padding-left:16px; text-decoration:none; }
.satori-cap-card .cap-body li { margin-bottom:4px; }
.satori-cap-card .cap-body li:last-child { margin-bottom:0; }
@media (max-width: 767px) {
  .satori-cap-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 639px) {
  .satori-cap-grid { display: flex; flex-direction: column; gap: 12px; }
}
</style>

<div class="satori-cap-grid">
  <a class="satori-cap-card" href="../segmentation/">
    <div class="cap-header"><p class="cap-title">Segmentation</p></div>
    <div class="cap-body-wrap"><ul class="cap-body">
      <li>Build audiences from behavior, spend, device, location, or custom game attributes</li>
      <li>Unlimited number of segments</li>
      <li>Segments update as players send events in near real-time</li>
    </ul></div>
  </a>
  <a class="satori-cap-card" href="../remote-configuration/">
    <div class="cap-header"><p class="cap-title">Remote configuration</p></div>
    <div class="cap-body-wrap"><ul class="cap-body">
      <li>Update any game parameter without client updates</li>
      <li>Serve different configurations to different player segments</li>
      <li>Unlimited number of feature flags and variants</li>
    </ul></div>
  </a>
  <a class="satori-cap-card" href="../live-events/">
    <div class="cap-header"><p class="cap-title">Live events</p></div>
    <div class="cap-body-wrap"><ul class="cap-body">
      <li>Plan and schedule from a bird's-eye event calendar</li>
      <li>Override feature flags to deliver custom variants per live event</li>
      <li>Require explicit join for opt-in events and retain enrolled players with sticky membership</li>
    </ul></div>
  </a>
  <a class="satori-cap-card" href="../experiments/">
    <div class="cap-header"><p class="cap-title">Experiments</p></div>
    <div class="cap-body-wrap"><ul class="cap-body">
      <li>Run A/B tests with sequential phases, adjusting variant split or values</li>
      <li>Set metrics to track outcomes and catch side effects</li>
      <li>Cap participants, set an admission deadline, or lock enrollment mid-experiment</li>
    </ul></div>
  </a>
  <a class="satori-cap-card" href="../player-messaging/">
    <div class="cap-header"><p class="cap-title">Player messaging</p></div>
    <div class="cap-body-wrap"><ul class="cap-body">
      <li>Deliver messages through the in-game inbox, push notifications, or email</li>
      <li>Personalize with player properties and multi-language translations</li>
      <li>Tie delivery to live event timing</li>
    </ul></div>
  </a>
  <a class="satori-cap-card" href="../performance-monitoring/">
    <div class="cap-header"><p class="cap-title">Performance monitoring</p></div>
    <div class="cap-body-wrap"><ul class="cap-body">
      <li>Track D1-D30 retention out of the box</li>
      <li>Identify drop-offs with funnel analysis</li>
      <li>Measure RoAS per cohort, filterable by channel, campaign, country, and experiment variant</li>
    </ul></div>
  </a>
</div>

## Satori at a glance

Satori ingests [analytic events](../performance-monitoring/understand-events/) from your game client at high throughput. Each event updates event-derived [player properties](../segmentation/understand-player-properties/), which in turn drive segment membership. [Segments](../segmentation/understand-audiences/) stay current continuously: as players send events, their membership is recomputed so targeting always reflects the latest player state.

When a player requests their active [live events](../live-events/), [experiments](../experiments/), or [feature flags](../remote-configuration/understand-feature-flags/), Satori evaluates eligibility at that moment against their current computed state, delivering the most up-to-date assignment every time.

Satori provides integration to your existing infrastructure:
- [Data export](../performance-monitoring/export-to-data-lakes/): All events remain available in their raw format and can be exported into your existing data lake such as BigQuery, Snowflake, and Databricks. 
- [Push notifications](../player-messaging/message-integrations/): Firebase FCM, Apple APNS, and OneSignal for out-of-game player messaging
- [Managed audiences](../segmentation/understand-audiences/#managed-audience-bring-your-own-segment): Import segment data from your existing analytics platform and use it as a targeting source directly in Satori

{{< diagram src="/images/pages/satori/concepts/introduction/satori_at_a_glance.svg" desc="How Satori works. Diagram of the Satori system architecture. Two entry points connect to the Satori backend: the Satori Console API, used by operators to configure and manage the platform, and the Game Client SDK, integrated in the game. The game client sends analytic events to the backend. In return, the backend sends live events, feature flags, and remote configs to the game client. The Satori backend processes incoming events, computes player properties, and evaluates audience membership to determine which content each player receives." >}}

## The full LiveOps lifecycle, in one place

Satori covers the full operational lifecycle in a single platform. Player events captured by the SDK feed the audience computation that determines who enrolls in a live event, which feature flag values they receive, and which experiment variant they are assigned. The live event calendar gives your team a bird's-eye view of everything scheduled and active. While an event runs, remote configuration lets you mutate reward values, flag overrides, or targeting in real time with no code deploy. When it ends, performance data flows back into the same system, ready to inform the next campaign.

{{< diagram src="/images/pages/satori/concepts/introduction/satori_lifeops_lifecycle.svg" desc="How Satori supports each stage of LiveOps. The six stages of the Satori LiveOps lifecycle shown in sequence: Target, Configure, Test, Launch, Operate, and Analyze. Each stage lists the Satori capabilities available at that point in the workflow." >}}


## How Satori is different

### Bring your own data model

[Feature flags](../remote-configuration/understand-feature-flags/) power remote configuration in Satori. You define the schema for each flag: the fields and types that represent a meaningful unit of your game world. A flag can carry a complete reward configuration, a set of difficulty parameters, or a shop layout. Experiments and live events then serve variants of that schema to targeted player segments.

### Event capture at high throughput

[Send analytic events](../performance-monitoring/understand-events/) and their associated properties for ingestion and analysis in Satori via the provided client SDKs. You can propagate events from Nakama automatically to have a full view of user activity, and receive events from any third-party systems you have in place.

### One connected player data layer

Satori maintains a robust [identity](../segmentation/understand-player-identities/) for every player, combining [default properties](../segmentation/understand-player-properties/#default-properties) with [custom properties](../segmentation/understand-player-properties/#how-to-add-a-custom-property) and [computed properties](../segmentation/understand-player-properties/#computed-properties) generated from your game events. These properties are the foundation of your [segmentation](../segmentation/), defining the [audiences](../segmentation/understand-audiences/) you target with content, offers, and experiments.

All of this is visible in the [identity's behavior stream](../segmentation/understand-player-identities/#inspect-player-activity-per-identity), where you can view all captured events, edit properties, and see which audiences the player belongs to, which experiments they're enrolled in, and which feature flags and remote configs apply to them.

### Segment data that stays up to date

Satori [recomputes all audiences](../segmentation/recompute-audience/) every 10 minutes by default. When a player sends a game event, their segment membership updates immediately. Live events and feature flags check a player's eligibility at the moment they make a request.

### Measure the impact of your operations

Define a [metric](../performance-monitoring/track-custom-metrics/) once and apply it to any experiment, feature flag, or live event. Scope a [retention report](../performance-monitoring/analyse-retention/) to players in a specific experiment variant, or filter your [return on ad spend report](../performance-monitoring/analyse-roas/) to a single live event. Build multi-step funnels from any sequence of analytic events, updated live.

## Next steps

{{< note "important" >}}
If you don't use Satori yet, [contact us](mailto:contact@heroiclabs.com) to start adding LiveOps capabilities to your game.
{{< /note >}}

1. Integrate Satori into your game by following the [get started guide](get-started/).
2. Explore each capability in more depth: [segmentation](../segmentation/), [remote configuration](../remote-configuration/), [live events](../live-events/), [experiments](../experiments/), [player messaging](../player-messaging/), and [performance monitoring](../performance-monitoring/).
3. Check the [client libraries](../../client-libraries/) to start developing your game client.
4. Browse the [console API reference](../../console/) for server-to-server communication endpoints.

Need help? [Get in touch](mailto:support@heroiclabs.com) with the Heroic Labs team.