---
title: Premium vs Freemium
nav_order: 2
---

# Premium vs Freemium

Premium and freemium are separate builds — `spitari.exe` vs `spitari-freemium.exe`. No runtime toggle.

## Build

```
build.bat          # Release x64
rebuild.bat        # clean + build
```

Output is external only — no DLL, no injection.

## Auth model

| | Premium | Freemium |
|--|---------|----------|
| Endpoint | `api.spitari.win/v1/activate` | `auth.spitari.win/v1/activate` |
| Signing | ECDSA P-256, point validation | same |
| Nonce | 16-byte | same |
| Challenge | 128-bit | same |
| HWID | multi-factor, 7h cooldown, max 3 resets | same |
| Session | DPAPI + heartbeat + pulse | + 12h gateway expiry |
| Tier check | rejected if tier mismatch | same |

## Feature diff

Premium **has**, freemium **missing**:

- MagicBullet + RaycastSilent + Resolver
- Instance explorer with search and tree
- 99 Nights and Fisch autoplayer
- Full Lua VM (executor, drawing, HTTP, memory, GC)
- MCP bridge (`127.0.0.1:3847`)
- Remote spy and device spoofer
- Hitbox expander
- Rage (spinbot, antiaim, orbit, ragebot)
- Chams (engine, shader, mesh)
- Editor and explorer windows, Fisch/Rage/99Nights tabs

Freemium has a home gateway tab that premium does not.

Shared: mouse/camera aim, viewport/phantom silent, triggerbot, ESP/World/Movement, MM2/BloxFruits/PF.

## Feature matrix

| Domain | Premium | Freemium |
|--------|---------|----------|
| Mouse / Camera aimbot | ✓ | ✓ |
| Viewport / Mouse / Phantom silent | ✓ | ✓ |
| RaycastSilent | ✓ | — |
| MagicBullet | ✓ | — |
| Triggerbot | ✓ | ✓ |
| ESP / Box / Skeleton / Tracer | ✓ | ✓ |
| Chams | ✓ | — |
| BoxFill | ✓ | ✓ |
| World | ✓ | ✓ |
| Fly / Speed / Noclip etc. | ✓ | ✓ |
| Fisch autoplayer | ✓ | — |
| 99Nights | ✓ | — |
| MM2 / BloxFruits / PF | ✓ | ✓ |
| Rage | ✓ | — |
| Explorer | ✓ | — |
| Lua VM | ✓ | — |
| MCP bridge | ✓ | — |
| Hitbox expander | ✓ | — |
| Remote spy | ✓ | — |

## How to branch in Lua

```lua
local exec, ver = identifyexecutor() -- "spitari","0.1"
local isPremium = pcall(function() return Drawing ~= nil end) and Drawing.new ~= nil
print(exec, isPremium and "premium" or "freemium")
```
