Core Concepts
RayLimit stays understandable because the product model is small and explicit:
- choose one runtime target
- choose one limiter family and one subject
- plan one direction at a time
- compare host state when possible
- execute only on concrete evidence
The Product Ideas That Matter Most
Runtime-Local Scope
Every limiter belongs to one selected runtime target. Another runtime with the same tag or a similar IP string is a separate subject with separate managed state.
Dry-Run First
Planning is the default. RayLimit treats the dry-run report as the operator-facing contract for what it observed, how it evaluated the state, and what it would execute.
Concrete Or Blocked
RayLimit does not collapse uncertainty into action. When it cannot derive a concrete selector or compare state safely enough, it blocks live execution instead of guessing.
Reconcile Awareness
RayLimit is not “apply only.” The same request can produce:
applywhen nothing exists yetno_opwhen the correct state is already presentreplacewhen observed state exists but differs from the desired stateremovewhen managed state exists without a desired state
Why The Families Behave Differently
The limiter families share the same operator surface but not the same backend truth:
ipuses direct client-IPtcattachmentinbounddepends on deriving one concrete listener-qualified selectoroutbounddepends on deriving one concrete socket-mark-qualified selector
That is why IP is direct and concrete more often, while inbound and outbound stay conservative when runtime evidence is weak or ambiguous.
How To Read The Rest Of The Docs
- Use Runtime Targeting to understand how RayLimit identifies one runtime.
- Use Traffic Selection to understand how the supported families differ.
- Use Behavior when you want to understand precedence, replace, no-op, and cleanup.