# Aspects & orbs

By default every chart computes the five major aspects with per-aspect orbs;
minor aspects are opt-in per aspect via `minorAspects`; orb behavior is
overridden with `aspectOrbs`.

## Choosing your settings

- Defaults are right for most charts: majors only, orbs 8/8/7/7/5.
- Turn on specific minors with `minorAspects` booleans — e.g.
  `{ "minorAspects": { "quincunx": true, "septile": true } }`.
- `{ "aspectOrbs": { "fixed": 3 } }` for a uniform tight orb;
  `{ "multiplier": 0.5 }` to halve every default orb; `"hide"` to skip aspect
  computation entirely.
- Classical/traditional practice: `{ "aspectOrbs": { "moiety": "porphyry" } }`
  on [astro_aspects](../reference/tools/astro_aspects.md) `within-chart`
  (per-planet moieties, table below).
- Research setups: `{ "aspectOrbs": { "perPair": { "Moon-Sun": 10 } } }` on
  `within-chart` for exact per-pair control.

## Aspect table

| Aspect | Angle | Default orb | Set | `minorAspects` key |
|---|---|---|---|---|
| Conjunction | 0° | 8° | major | always on |
| Opposition | 180° | 8° | major | always on |
| Trine | 120° | 7° | major | always on |
| Square | 90° | 7° | major | always on |
| Sextile | 60° | 5° | major | always on |
| Quincunx | 150° | 2.5° | minor | `quincunx` |
| Semi-Sextile | 30° | 2° | minor | `semiSextile` |
| Semi-Square | 45° | 2° | minor | `semiSquare` |
| Sesquiquadrate | 135° | 2° | minor | `sesquiquadrate` |
| Quintile | 72° | 1.5° | minor | `quintile` |
| Bi-Quintile | 144° | 1.5° | minor | `biQuintile` |
| Septile | 51.43° (360/7) | 1.5° | minor | `septile` |
| Bi-Septile | 102.86° (720/7) | 1.5° | minor | `biSeptile` |
| Tri-Septile | 154.29° (1080/7) | 1.5° | minor | `triSeptile` |
| Novile | 40° | 1.5° | minor | `novile` |
| Bi-Novile | 80° | 1.5° | minor | `biNovile` |
| Quadri-Novile | 160° | 1.5° | minor | `quadriNovile` |
| Semi-Quintile | 36° | 1° | minor | `semiQuintile` |
| Undecile | 32.73° (360/11) | 1° | minor | `undecile` |
| Quindecile | 165° | 2° | minor | `quindecile` |

With `minorAspects` omitted, only the five majors are computed. Detection uses
the shortest angular distance between the two bodies, checked against the
active aspects in table order.

## `aspectOrbs` — the orb override

`aspectOrbs` is a union:

- `"default"` (or omit) — the per-aspect defaults above.
- `"hide"` — compute no aspects.
- `{ "fixed": n }` — one orb for every active aspect; `n` from 0.5 to 15.
- `{ "multiplier": n }` — every default orb scaled by `n`; 0.1 to 2.0.

On [astro_aspects](../reference/tools/astro_aspects.md) `within-chart` ONLY,
two more modes:

- `{ "moiety": "porphyry" }` — the orb for each pair is the mean of the two
  bodies' classical orbs ("moieties"): Sun 15°, Moon 12°, Saturn 9°,
  Jupiter 9°, Mars 8°, Venus 7°, Mercury 7°, anything else 8°. Example: a
  Moon–Mercury aspect allows (12 + 7) / 2 = 9.5°.
- `{ "perPair": { ... } }` — explicit per-pair maximum orbs. Keys are the two
  body ids sorted alphabetically and joined with a hyphen (`"Moon-Sun"`,
  `"Jupiter-Saturn"`); values 0.1 to 15. Pairs not listed fall back to the
  per-aspect defaults.

## Reading the output

Each aspect record has `body1`, `body2`, `aspect`, `angle`, `orb`,
`isApplying`. `orb` is signed — separation minus exact angle, rounded to 2
decimals: negative means the aspect is still approaching exactness, positive
means past it. `isApplying` projects both bodies forward along their current
speeds (retrograde-aware) and reports whether the distance to exact is
closing.

`astro_aspects` `within-chart` output for the quickstart subject
(1990-01-01 12:00, London, defaults) — 13 major aspects come back in total;
two of them:

```json
[
  {
    "body1": "Sun",
    "body2": "Jupiter",
    "aspect": "Opposition",
    "angle": 180,
    "orb": -5.67,
    "isApplying": false
  },
  {
    "body1": "Sun",
    "body2": "Saturn",
    "aspect": "Conjunction",
    "angle": 0,
    "orb": 4.84,
    "isApplying": true
  }
]
```

## Cross-chart aspects default to a flat 3° orb

`between-charts` comparisons and transit scans default to `{ "fixed": 3 }`
instead of the natal defaults — cross-aspect lists stay readable instead of
tripling in size. Override with `aspectOrbs` if you want wider scans. In
transit comparisons only the moving chart's motion counts toward
applying/separating; comparing two birth charts is a static comparison. The
`moiety`/`perPair` modes are not available on `between-charts` — use
`fixed`/`multiplier` there.

## Declination parallels

Parallel and contra-parallel contacts are computed from declinations as a
separate list, gated by `parallelOrb` (0 to 3; default 1.2°).

## Tools that accept `aspectOrbs`

[astro_aspects](../reference/tools/astro_aspects.md),
[astro_chart](../reference/tools/astro_chart.md),
[astro_chart_derived](../reference/tools/astro_chart_derived.md),
[astro_chart_pattern](../reference/tools/astro_chart_pattern.md),
[astro_progressions](../reference/tools/astro_progressions.md),
[astro_returns](../reference/tools/astro_returns.md).

## Related

- [Birth data](./birth-data.md)
- [House systems](./house-systems.md)
- [Choosing a tool](./choosing-a-tool.md)
- [Reference](/reference.md)
