Skip to main content

Limits and Quotas

RowOps enforces limits based on organization tier and system constraints. This page documents the limit structure, enforcement points, and known considerations.


Limits as Policy

Tier limits represent policy decisions, not hard technical constraints. Limits are:

  • Enforced at specific checkpoints in the system
  • Subject to change between versions
  • Potentially inconsistent between enforcement points

Do not rely on limits as security boundaries without verification.


Tier-Based Limits

Resource Limits by Tier

The following limits are defined in dashboard tier policy:

ResourceFreeProScaleEnterprise
Max Projects1310Unlimited
Max Rows/Import1,000100,0001,000,000Unlimited
Max DomainsLocalhost + 1Localhost + 3Localhost + 10Unlimited
Log Retention0 days30 days90 days365 days

Feature Availability

FeatureFreeProScaleEnterprise
Basic validationYesYesYesYes
MaskingLimitedYesYesYes
TransformsLimitedYesYesYes
ProfilingBasicFullFullFull
Fuzzy matchingNoNoYesYes
SSONoNoNoYes

Enforcement Points

Server-Side Enforcement

Limits enforced before API response:

LimitEnforcement Location
Row limitsLicense verification (/api/license/verify)
Project limitsProject creation API
Domain limitsDomain registration API
Feature accessLicense verification response

Client-Side Checks

Some limits are checked client-side:

CheckLocation
Tier gateEngine initialization + worker/WASM boundary
Row limitsPipeline start + worker/WASM boundary
Demo mode limitPipeline execution (100 rows)

Client-side checks are not security boundaries. Server-side enforcement is authoritative.


Hard Caps (DoS Prevention)

System-wide hard caps prevent resource exhaustion:

LimitValuePurpose
Max columns250Memory protection
Max row length1 MBParse buffer limits
Max schema fields500Schema complexity
Max transform steps20Pipeline complexity
Max nesting depth20Recursion protection

These caps apply regardless of tier.


Enforcement Timing

Limits are checked at different times:

LimitWhen Checked
Row limitsLicense verification + pipeline start + WASM boundary
Project limitsAt project creation
Domain limitsAt domain registration
Feature limitsAt feature invocation

A request may pass early checks but fail later checks.


Demo Mode Limits

Demo mode (headless) has fixed limits regardless of tier:

LimitValue
Max rows100
WatermarkApplied to exports

Demo mode is for testing only. It bypasses license verification.


Unverified or Offline Behavior

When entitlement verification cannot be performed (no network, invalid token), the execution plane fails closed:

BehaviorDescription
Tier gateDefaults to Free
Row limitsEnforced at Free limits
FeaturesPremium modules disabled until a verified token is provided

Cached entitlement tokens are not security boundaries and can be tampered with locally.


What Limits Do Not Prevent

Limits are not security controls:

ScenarioLimit Behavior
Memory exhaustionHard caps exist but browser may still crash on large files
Processing timeNo time limits on pipeline execution
CPU usageNo throttling within pipeline
Concurrent requestsNo per-client rate limiting documented

Monitoring Limit Usage

Dashboard Visibility

Usage is visible in the dashboard:

  • Current row usage against limits
  • Project count against limit
  • Domain count against limit

API Access

Usage can be queried via API (endpoints vary by implementation).


Exceeding Limits

Behavior When Exceeded

LimitBehavior
Row limitstop_with_warning by default; hard_error when configured or denied server-side
Project limit402 error; creation blocked
Domain limit402 error; registration blocked
Feature limitFeature unavailable or degraded

Row Limit Handling

Row limits are enforced at pipeline start and at the worker/WASM boundary.

Default behavior (stop_with_warning):

  • Parsing stops at the tier limit
  • A ROW_LIMIT_REACHED warning is emitted with skipped row metadata
  • A skipped partition records omitted rows

Strict behavior (hard_error):

  • Parsing aborts immediately with an error
  • No partial output is returned