# Control flow

Source: https://hashisoft.com/docs/dashboard/controlflow/introduction

Change how branches and loops connect

Eligible methods are rewritten around encoded dispatchers. Use the settings below to select the flow passes and control how much state they generate.

## Configuration

These entries belong in the `engine` block of your RR configuration.

```rr
engine ^ {
  skipFlow false;
  chainedControlFlow true;
  aggressiveFlow true;
}
```

## Start with the default level

Hardening levels range from 0 to 5. A higher level can increase bytecode size and processing cost. Dispatcher state cells control generated state and do not represent a protection score.

## Option reference

For options beginning with `skip`, `false` enables the pass.

### Control Flow Flattening

boolean

`skipFlow`

Rewrites eligible branches and loops around encoded dispatchers. Enabled exports skipFlow false. Methods that exceed size or frame limits may be skipped.

Panel default `false`

### Chained Control Flow

boolean

`chainedControlFlow`

Carries encoded state between transformed blocks. Keep verification enabled and test the resulting application.

Panel default `true`

### Aggressive Control Flow

boolean

`aggressiveFlow`

Uses denser control flow transformations. This can increase build time, output size and runtime overhead.

Panel default `true`

### Opaque Predicates

boolean

`bozarFlow`

Applies the branch transformation pass alongside the selected flow settings.

Panel default `true`

### Encoded Dispatchers

boolean

`skipEncodedDispatcher`

Includes the encoded dispatcher pass. Enabled exports skipEncodedDispatcher false.

Panel default `false`

### Analysis Maze

boolean

`skipAnalysisMaze`

Includes analysis maze transformations where the method passes compatibility checks.

Panel default `false`

### Frame Hardening

boolean

`skipBoundedFrameHardening`

Includes bounded frame hardening. This setting is separate from JVM bytecode verification.

Panel default `false`

### Application Method Flow

boolean

`hashiraHelperAppearance`

Applies the application method appearance pass. Decompiled formatting depends on the tool used.

Panel default `true`

### Dispatcher State Cells

enum

`hashiraStateCells`

Sets the dispatcher state cell count. Larger values can increase generated state and bytecode.

Panel default `64`Values `32 · 64 · 128 · 256 · 512`

### Hardening Level

enum

`decompileHardeningLevel`

Selects a hardening level from 0 to 5. Higher levels can increase output size and processing cost.

Panel default `3`Values `0 · 1 · 2 · 3 · 4 · 5`

## Related guides

[RR configurations ](https://hashisoft.com/docs/configurations)[Submit a build ](https://hashisoft.com/docs/quickstart)
