Introduction to
AUXTA
AUXTA is a high-performance, self-hosted decisioning and matchmaking layer for gaming teams that need real-time player decisions, flexible indexes, and transparent matchmaking logic — without vendor lock-in.
What is AUXTA
AUXTA stores entities — players, sessions, matches, offers, transactions — as multi-dimensional behavioral vectors. These can be queried in real time without pipelines, batch jobs, or reindexing delays. The result is sub-millisecond segment resolution during live gameplay, monetization moments, and matchmaking flows.
Unlike SaaS platforms, AUXTA runs inside your own infrastructure. Your data never leaves your environment, satisfying the strictest data residency and sovereignty requirements across 160+ jurisdictions.
Three Product Layers
Key Differentiators
| # | Differentiator | What it means |
|---|---|---|
| 01 | Index-native decisioning | Decisions are queries over live indexes — no separate segmentation pipeline. |
| 02 | No reindexing on new dimensions | Add a new player dimension (e.g. churnRiskScore) without rebuilding pipelines. |
| 03 | Self-hosted deployment | Full infrastructure control, data ownership, lower vendor lock-in. |
| 04 | Sub-millisecond query path | Segment queries resolve in under 0.2ms, live during runtime. |
| 05 | Core-powered matchmaking | Candidate search in Match is powered by live player vector queries in Core. |
| 06 | Full execution trace | Inspect every query, decision, ticket, and match result step-by-step. |
| 07 | Builder + JSON workflow | LiveOps managers use Builder Mode; engineers use JSON Mode — same config. |
| 08 | Gaming-native object model | Players, matches, sessions, transactions, offers, queues, tickets — first-class objects. |
When to Use AUXTA
Product
Architecture
AUXTA is structured as three connected layers that share a unified data model but operate independently. Understanding how Core, Console, and Match interact is key to a successful integration.
Data Flow
Your backend writes entity state to AUXTA Core on session events. Core stores these as behavioral vectors. At decision time — matchmaking, offer logic, LiveOps rules — Core resolves segment queries in real time.
AUXTA Match then consumes Core candidate queries to fill matchmaking queues, apply match rules, and emit match results back to your session layer.
The AUXTA Console provides observability, configuration, and simulation UI across both Core and Match — allowing LiveOps managers and engineers to debug, adjust, and rollout changes without a backend deploy.
// 1. Your backend writes to Core on session events core.record("players", { id: "player_123", dimensions: { mmr: 1840, consecutiveLosses: 3, churnRiskScore: 0.72, region: "eu-west" } }); // 2. Core resolves segment query live (<0.2ms) const candidates = core.query("players", { mmr: { gte: 1750, lte: 1950 }, region: "eu-west" }); // 3. Match groups candidates into a match match.evaluate(candidates, queue_rules);
Phase Overview
| Phase | Features | Goal |
|---|---|---|
| Phase 1 Demo-Ready Console | Core Dashboard, Indexes, Dimensions, Records, Segments, Decisions, Playground, Logs | Demonstrate live query and decisioning capability |
| Phase 2 Demo-Ready Match | Match Services, Core Connection, Queues, Candidate Query, Match Rules, Tickets, Match Results, Simulator | End-to-end matchmaking loop |
| Phase 3 LiveOps Layer | Actions, Experiments, Insights, Guardrails, Versioning, Audit Trail | Safe, measurable real-time operations |
| Phase 4 Enterprise Readiness | RBAC, Multi-env management, Advanced audit, HA configuration, Backup/restore | Production hardening and compliance |
Quick
Start
Get AUXTA Core running locally and make your first real-time segment query in under 10 minutes.
Step 1 — Start Core Server
# Pull and start AUXTA Core docker pull auxta/core:latest docker run -p 7700:7700 \ -e AUXTA_API_KEY=your_key_here \ auxta/core:latest
Step 2 — Create an Index
POST /indexes { "name": "players", "primaryKey": "id", "template": "gaming_player" }
Step 3 — Write a Record
PUT /indexes/players/records/player_123 { "id": "player_123", "mmr": 1840, "consecutiveLosses": 3, "churnRiskScore": 0.72, "region": "eu-west", "sessionLength": 47 }
Step 4 — Run a Segment Query
POST /indexes/players/query { "filter": { "mmr": { "gte": 1750, "lte": 1950 }, "churnRiskScore": { "gte": 0.6 }, "region": "eu-west" }, "limit": 100 } // Response in <0.2ms { "matched": 12, "latencyMs": 0.14, "records": [...] }
Core Server
Management
View and manage AUXTA Core servers, environments, regions, status, connection health, storage mode, CPU, memory, disk, QPS, and latency — all from the Console.
| Field | Description |
|---|---|
| Server Status | Live / Degraded / Offline indicator with last-heartbeat timestamp. |
| Connection Health | Latency to the Core server from the Console — useful for multi-region deployments. |
| Storage Mode | In-memory, hybrid, or persistent. Affects latency and durability tradeoffs. |
| CPU / Memory / Disk | Live system resource gauges. Alert thresholds configurable per server. |
| QPS | Queries per second across all indexes. Drillable by index and query type. |
| Latency | Median, p95, p99 query latency displayed in real time. |
Environment
Management
AUXTA supports separate Demo, Staging, Production, and region-specific environments. Environments are isolated — changes in one do not affect others.
| Environment | Purpose |
|---|---|
| Demo | Pre-loaded with sample data for sales, onboarding, and internal testing. |
| Staging | Mirror of production for integration testing and rollout validation. |
| Production | Live player data. RBAC enforced, audit trail active. |
| Region-specific | Separate Core servers per region (EU, NA, APAC) for data residency compliance. |
Index
Management
Indexes are AUXTA's core abstraction. Each index represents a business object — players, matches, sessions, transactions, offers, guilds, events — stored as behavioral vectors queryable in real time.
Built-in Index Templates
Adding a Dimension Without Reindexing
POST /indexes/players/dimensions { "name": "frustrationScore", "type": "computed", "expression": "consecutiveLosses * (1 - winRate)" } // Available in queries immediately — no reindex required
Dimension
Management
Dimensions are the individual fields inside an index. AUXTA supports three dimension types: static, dynamic, and computed. All are queryable in real time without reindexing.
| Type | Description | Example |
|---|---|---|
| Static | Set once, rarely changes. Used for identity and profile fields. | region, platform, accountAge |
| Dynamic | Written on session events by your backend. Updated in real time. | mmr, consecutiveLosses, sessionLength |
| Computed | Derived from other dimensions using an expression. Always current. | churnRiskScore, frustrationScore, totalWins |
Record &
Vector Browser
Browse records as vectors, inspect current state, dimensions, matched segments, and recent decisions — all in real time from the Console.
What You See
| Field | Description |
|---|---|
| Vector State | All dimensions for the record at this exact moment in time. |
| Matched Segments | Which segments this record currently satisfies — re-evaluated live. |
| Recent Decisions | Last N decisions fired for this record, with timestamps and action results. |
| Dimension History | Timeline of dimension value changes over recent sessions. |
Query Builder
& Playground
Build and test real-time queries over indexes using Builder Mode (point-and-click) or JSON Mode (direct payload). The Playground shows matched records, latency, payload, and response immediately.
Builder Mode vs JSON Mode
| Mode | Audience | Output |
|---|---|---|
| Builder Mode | LiveOps, product managers, QA | Visual filter editor — no JSON required |
| JSON Mode | Backend engineers, integration teams | Raw query payload — copy to API |
API Keys &
Service Tokens
Manage access credentials for Core, Match, webhooks, and backend services. Scopes control which indexes and operations each key can access.
| Token Type | Scope | Use Case |
|---|---|---|
| Core Read | Query indexes only | Decision engine, Match candidate query |
| Core Write | Write and update records | Session event ingestion pipeline |
| Match Service | Queue, ticket, match operations | Matchmaking service authentication |
| Webhook | Outbound action callbacks | Action delivery to backend services |
| Admin | Full Console and config access | Console operators, CI/CD pipelines |
System
Dashboard
The System Dashboard shows active connections, total requests, failed requests, CPU, memory, disk, and storage mode — all updating in real time.
| Metric | Description |
|---|---|
| Active Connections | Current open connections to Core, drillable by service type. |
| Request Rate | Queries per second across all indexes. Includes read and write breakdown. |
| Error Rate | Failed request rate with error type distribution. |
| CPU / Memory / Disk | System resources with configurable alert thresholds. |
| Storage Mode | Current active storage mode — in-memory, hybrid, or persistent. |
Latency
Dashboard
Show median, p95, and p99 query latency broken down by index, segment, decision, and queue. Use this view to validate SLA targets and identify slow query paths.
Matchmaking
Dashboard
Monitor active tickets, match rate, average wait time, p95 wait time, and match quality score across all queues — in real time.
| Metric | Description |
|---|---|
| Active Tickets | Players currently in queue, grouped by queue and expansion step. |
| Match Rate | Successful matches per minute. Drops indicate queue health issues. |
| Avg Wait Time | Mean time from ticket submission to match creation. |
| p95 Wait Time | 95th percentile wait time. Key SLA metric for player experience teams. |
| Match Quality Score | Composite score: skill balance + latency fit + region fit + party fit. |
| Ticket Expiration Rate | % of tickets that expire without a match — signals queue configuration issues. |
Logs &
Audit Trail
AUXTA provides structured logs across every layer: system, query, decision, match, worker, action, and audit. Use them for debugging, compliance, and incident response.
Log Types
| Log Type | Contents |
|---|---|
| System Logs | Core server health events, connection changes, storage mode switches. |
| Query Logs | Every query: filter, matched count, latency, index, timestamp. |
| Decision Logs | Why a decision fired: matched segment, conditions passed, guardrails passed, action result. |
| Match Logs | Queue events, ticket lifecycle, candidate query, match creation, worker events. |
| Action Logs | Action delivery status, webhook response, payload. |
| Audit Logs | Configuration changes: who changed segment, decision, queue rule, expansion policy — and when. |
Execution
Trace
For any query, decision, or match result — view a step-by-step execution path showing exactly what happened and why. This is AUXTA's primary debugging surface.
Trace Steps
| Step | Description |
|---|---|
| Query Resolved | Filter applied, matched record count, latency in ms. |
| Segment Matched | Which segment rule matched and why — dimension values that satisfied conditions. |
| Decision Evaluated | Conditions checked, guardrails evaluated (cooldown, frequency, exclusions). |
| Action Triggered | Action type, payload, delivery status, webhook response. |
| Total Latency | Wall-clock time from query start to action completion. |
Segment
Builder
Create reusable real-time segments over indexes — for example, Frustrated Competitive Players. Segments are live queries: they update the moment a record's dimensions change.
Segment Preview
Before activating a segment, the Segment Preview shows: matched records, coverage %, sample players, median latency, and p95 latency. This lets you validate coverage and performance before any player is affected.
Segment Versioning
AUXTA keeps a full version history of every segment. You can roll back to a previous definition if a change produces unexpected coverage shifts or decision behavior.
Example Segment
{
"name": "frustrated_competitive_players",
"index": "players",
"filter": {
"consecutiveLosses": { "gte": 3 },
"mmr": { "gte": 1600 },
"sessionLength": { "gte": 30 },
"churnRiskScore": { "gte": 0.55 }
}
}
Decision
Builder
Define trigger → segment → conditions → action → guardrails → metrics. Decisions fire in real time when a player record satisfies a segment while the configured conditions are met.
Decision Structure
| Step | Description |
|---|---|
| Trigger | What event causes the decision to evaluate: session start, purchase event, match end, custom event. |
| Segment | Which segment the player must satisfy for the decision to proceed. |
| Conditions | Additional dimension checks applied on top of segment membership. |
| Guardrails | Max frequency, cooldowns, exclusions, control group. Prevent abuse. |
| Action | What fires: reward, offer, suppress offer, route queue, webhook, notification. |
| Metrics | What outcome to measure: next session rate, retry rate, reward claim rate, conversion uplift. |
Available Actions
Guardrails
& Safety
Guardrails prevent decisions from firing too frequently, targeting excluded groups, or circumventing fraud protection. They are configured per-decision and evaluated before any action is triggered.
| Guardrail | Description |
|---|---|
| Max Frequency | Maximum times a decision can fire per player per time window. |
| Cooldown | Minimum time between firings for a given player. |
| Exclusions | Exclude specific segments or player attributes from triggering the decision. |
| Fraud Exclusion | Automatically skip players flagged for fraud review. |
| Control Group | Reserve a % of eligible players who never receive the action — for A/B measurement. |
Decision
Simulator
Test how a player vector is evaluated against segments, decisions, and guardrails — without touching production data. See exactly which segment matches, which decision fires, and which action would trigger.
Simulator Inputs
{
"playerVector": {
"mmr": 1840,
"consecutiveLosses": 4,
"churnRiskScore": 0.71,
"region": "eu-west"
},
"trigger": "session_start",
"decisions": ["frustrated_player_recovery"]
}
// Simulator output:
// ✓ Segment matched: frustrated_competitive_players
// ✓ Guardrails passed: no cooldown active
// → Action: route to recovery_queue + issue_soft_reward
Experiments
& Insights
Create A/B tests across rewards, offers, matchmaking routing, and progression tuning. Measure outcomes: next session rate, retry rate, reward claim rate, conversion uplift, fraud prevented.
| Experiment Target | Description |
|---|---|
| Rewards | Test different reward amounts, types, or timing for the same player segment. |
| Offers | Compare offer content, pricing, or visibility logic across cohorts. |
| Queue Routing | Route experiment arms to different queues and measure match quality and retention. |
| Match Rules | Test relaxed vs strict skill delta rules and measure player experience impact. |
Insights Metrics
Match
Services
View and manage deployed AUXTA Match services by region, environment, connected Core server, status, queues, and workers. Match is a separate runtime from Core — it connects to Core for candidate queries.
| Field | Description |
|---|---|
| Service Status | Running / Degraded / Offline. Heartbeat-based with configurable timeout. |
| Region | Deployment region — must match or colocate with the Core server for low latency. |
| Connected Core | Which Core server this Match service uses for candidate queries. |
| Active Queues | Number of configured and running queues in this service. |
| Worker Count | Match worker threads — controls concurrent matchmaking throughput. |
| Match Success Rate | % of processed tickets that resulted in a valid match. |
Queue
Configuration
Configure matchmaking queues such as ranked_4v4_queue, casual_2v2_queue, and new_player_protection_queue. Each queue has its own rules, ticket schema, candidate query, and expansion policy.
Queue Parameters
| Parameter | Description |
|---|---|
| Mode | Queue type: ranked, casual, custom. Affects default match rule templates. |
| Team Size | Players per team and number of teams per match. |
| Candidate Source | Which AUXTA Core index to query for candidates. |
| Ticket TTL | Max time a ticket stays in queue before expiring. |
| Expansion Interval | How often the match rules relax — in seconds. |
| Max Expansion Steps | Number of times rules can relax before ticket expires. |
Candidate Query
The Candidate Query configures how Match uses AUXTA Core to find eligible players for each ticket. This is AUXTA's core differentiator: candidate search is powered by live player vector queries, not static pools.
{
"candidateQuery": {
"index": "players",
"filter": {
"region": "$ticket.region",
"mmr": { "gte": "$ticket.mmr - 150",
"lte": "$ticket.mmr + 150" },
"status": "online"
},
"limit": 500
}
}
Match
Rules
Configure team size, skill delta, max latency, region match, party size, platform, and toxicity exclusion. Match Rules control which candidate combinations produce a valid match.
| Rule | Description | Expandable |
|---|---|---|
| Skill Delta | Max allowed difference in MMR between teams. | ✓ Yes |
| Latency Max | Maximum acceptable ping between players. | ✓ Yes |
| Region Match | Strict or relaxed region co-location requirement. | ✓ Yes |
| Party Size | Min/max party size allowed in the queue. | ✗ No |
| Platform | Cross-platform match allowed or platform-isolated. | ✗ No |
| Toxicity Exclusion | Exclude players with active toxicity flags from matching together. | ✗ No |
Expansion
Rules
Define how match constraints relax over time as a ticket waits in queue. Expansion rules balance match quality against wait time by progressively widening acceptance criteria.
{
"expansionRules": [
{
"step": 1,
"afterSeconds": 10,
"skillDelta": { "increase": 50 }
},
{
"step": 2,
"afterSeconds": 25,
"skillDelta": { "increase": 100 },
"latencyMax": { "increase": 20 }
},
{
"step": 3,
"afterSeconds": 45,
"region": { "relax": true },
"maxWait": 60
}
]
}
| Expansion Target | Description |
|---|---|
| Skill Delta | Increase allowed MMR range per expansion step. |
| Latency Max | Increase acceptable ping threshold. |
| Region | Allow cross-region matching after N seconds. |
| Max Wait | Hard cap on queue time — ticket expires and falls back after this value. |
Tickets
& Match Results
View live tickets, inspect their lifecycle, and review completed match results. The Ticket Inspector shows the full candidate query trace and rejection reasons — making debugging queue issues fast.
Ticket Lifecycle
| Status | Description |
|---|---|
| Queued | Ticket received, candidate query pending. |
| Searching | Candidate query executing against Core index. |
| Evaluating | Match rules being tested against candidates. |
| Expanding | Rules relaxed — re-evaluating with wider criteria. |
| Matched | Valid match found — match result emitted. |
| Expired | Max wait time reached without a match. |
Match Quality Score
Every completed match receives a Match Quality Score — a composite metric computed from skill balance, latency average, region fit, party fit, and toxicity risk. Use this score to monitor player experience impact over time.
Match
Simulator
Test a ticket payload through candidate query, match rules, expansion steps, and match result — before any player touches the queue. Validate configuration with confidence.
AUXTA vs
PubNub Illuminate
PubNub Illuminate provides real-time decisioning over Business Objects. AUXTA extends this pattern with gaming-native indexes, self-hosted deployment, and a matchmaking layer powered by the same index infrastructure.
| PubNub Illuminate | AUXTA Equivalent | AUXTA Differentiation |
|---|---|---|
| Business Objects | Indexes | Gaming-native indexes: players, matches, sessions, transactions, offers |
| Decisions | Decision Builder | Connected directly to Core indexes and Match queues |
| Dashboards | Insights / Decision Activity | Includes system latency, query latency, match quality, action traces |
| Real-time decisioning | Real-time Segments + Decisions | Self-hosted and index-native |
| Actions | AUXTA Actions / Webhooks | Can trigger rewards, queue routing, offers, fraud flags, backend updates |
| Low-code ops | Builder Mode | Also supports JSON Mode for developers |
AUXTA vs
PlayFab
PlayFab is a full backend-as-a-service platform. AUXTA targets the decisioning and matchmaking layer specifically — with stronger real-time performance, self-hosting, and execution trace transparency.
| PlayFab Capability | AUXTA Equivalent | AUXTA Differentiation |
|---|---|---|
| Player Segments | AUXTA Segments | Real-time index queries, no reindexing focus |
| Custom Properties | AUXTA Dimensions | Static, dynamic, computed dimensions |
| Segment Actions | AUXTA Actions | Connected to player vectors, decisions, queues |
| Rules | Decision Builder | Stronger execution trace and reason visibility |
| Matchmaking Queues | AUXTA Match Queues | Powered by AUXTA Core candidate queries |
| Tickets | AUXTA Match Tickets | Ticket inspector and candidate query trace |
AUXTA vs
AWS FlexMatch
AWS FlexMatch is deeply integrated with the GameLift hosting layer. AUXTA offers comparable matchmaking logic as a self-hosted, backend-agnostic service with richer observability and Core-powered candidate search.
| FlexMatch Capability | AUXTA Equivalent | AUXTA Differentiation |
|---|---|---|
| Matchmaking configuration | Match Service / Queue config | Visible Core connection and candidate query setup |
| Rule sets | Match Rules | Builder + JSON, integrated with player index dimensions |
| Player attributes | Ticket fields + Core dimensions | Combines ticket data with live player vector |
| Expansion / relaxation | Expansion Rules | Visual timeline and impact preview |
| Match quality rules | Match Quality Score | Explicit score, trace, and reason output |
| Game session queue | Match Results / callback | Self-hosted, decoupled from AWS hosting |
AUXTA vs
Unity Matchmaker
Unity Matchmaker integrates natively with Unity Game Services hosting. AUXTA is hosting-agnostic and extends the matchmaking model with live player vector queries from Core.
| Unity Capability | AUXTA Equivalent | AUXTA Differentiation |
|---|---|---|
| Queues | Match Queues | Core-powered candidate query and no-reindexing data model |
| Pools | Queue pools / candidate pools | Represented as Queue Type or Candidate Query variants |
| Tickets | Tickets | Ticket inspector, queue trace, candidate query trace |
| Match rules | Match Rules | Builder + JSON mode |
| Hosting integration | Webhooks / backend callbacks | Self-hosted, backend-agnostic |
| Match result | Match Results | Match quality score and full trace |