Custom Yoga Constructor
What it is
The Custom Yogas feature is a small rules engine that lives inside KarmaWheel. You define a yoga as a boolean expression over the chart's tag inventory; whenever you open a chart, every yoga whose expression evaluates to true against that chart shows up in the "My Custom Yogas" card alongside the built-in classical yogas.
Earlier versions of this feature offered a small set of dropdown rules ("planet X in house Y", "lord of A aspects B"). That was thin and left out most of the things working astrologers actually want to codify. The constructor replaces it with a full expression language over ~800 chart tags so you can express things like:
(/LO9IN10/ OR /LO10IN9/) AND NOT /JUDEB/
— "9th lord in 10th OR 10th lord in 9th, but not if Jupiter is debilitated".
How to find it
Hamburger → Custom Yogas.
The list view shows all yogas you've created. Tap + New Yoga to open the composer. Tap any existing yoga to edit, delete, or share it.
The composer
The composer has four sections:
1. Identity
- Name — short title, e.g. "Karma-Dharma Adhipati Yoga".
- Kind — a colour tag for the result card:
auspicious,inauspicious,mixed, orneutral. - Description — one-line summary.
2. Expression
A textarea in monospace. Above it, a small toolbar inserts the four operators at the caret: AND, OR, NOT, (, ).
Below the textarea is the tag picker — a collapsible pane with every tag KarmaWheel knows how to compute, organised by category:
- Planet in House (108 tags)
- Planet in Sign (108 tags)
- House Lord in House (144 tags)
- House Lord in Sign (144 tags)
- Dignity (Exalted / Debilitated / Own / Moolatrikona / Retrograde)
- House Groupings (Kendra / Trikona / Dusthana / Benefic-in-house / Malefic-in-house)
- Sign Relationship (Friend / Neutral / Enemy)
- Lagna Sign
- Planet in Nakshatra (243 tags)
- Planet in Pada
- Lagna & Moon Nakshatra/Pada
- Planet Is House-Lord (which lordships each planet currently holds)
Each category has a search box. Tapping a tag inserts it into the expression at the caret.
3. Reading
Free-text interpretation that will display whenever this yoga matches. A language picker lets you write the reading in any of the 16 KarmaWheel languages (English, Hindi, Marathi, Sanskrit, Bengali, Tamil, Telugu, Kannada, Malayalam, Gujarati, Punjabi, Spanish, French, German, Portuguese, Italian, Japanese, Polish). This text travels with the yoga when you share it.
4. Share
A single checkbox: Share with the community. When ticked, your yoga (expression and reading) appears in the Community browse list, where any user can copy it into their own collection.
The expression language
A tiny grammar:
expression := or
or := and ( OR and )*
and := not ( AND not )*
not := NOT not | atom
atom := TAG | '(' expression ')'
- Tags are written between forward slashes:
/SUNIN10/,/LO9DEB/,/JUSTAR9/. - Operators are case-insensitive:
and,OR,notall parse. - Whitespace is ignored.
- Parentheses group precedence (default precedence is
NOT > AND > OR, the usual one).
Examples:
/SUNIN10/ AND /MOIN4/
/LO9IN1/ OR /LO9IN5/ OR /LO9IN9/
NOT /JUDEB/
(/LO5IN9/ OR /LO9IN5/) AND /JUEX/
/MOONSTAR3/ AND /SUNSTAR21/
/JUINKEN/ AND /VEINKEN/ AND /MEINKEN/
The validation lamp
As you type, the composer pings the server for a parse check. Just under the textarea you'll see one of three states:
- 🟢 Valid — followed by the canonical form of your expression (a re-emit with normalised spacing and grouping). If a chart is currently loaded, you also see a per-tag breakdown: ✓ for tags that match the chart, ✗ for tags that don't, plus the overall match result.
- 🟡 Valid but no chart loaded — parses, but we can't tell you whether it would fire because no chart is open.
- 🔴 Parse error — the message points to the position in your text where parsing failed (e.g. expected ')' near position 24).
The validation runs on a 250 ms debounce so it doesn't fire on every keystroke.
Saving and matching
When you tap Save, the server stores the canonical form of your expression alongside the raw form. Each time you open a chart, KarmaWheel computes the chart's tag set and runs every saved expression against it. Any that evaluate to true show up under My Custom Yogas with your reading text.
Custom-yoga matches also feed into the AI Reading prompt, so when you ask for an interpretation the model sees your custom yogas alongside the built-in classical ones.
The community browser
In the yoga list, tap Community to browse yogas other users have shared. Each card shows the author's name, the expression, and the reading text. Tap Copy to add a yoga to your own collection (you can edit it freely afterward — your copy is independent of the shared original).
If you have something powerful you've worked out, share it. Other users get the benefit of your insight and you get a kind of byline on the work.
Caveats
- The expression evaluator is purely tag-based. It does not understand astrological concepts directly — only whether a given tag is or isn't in the chart's tag set. If you need a relationship KarmaWheel doesn't currently tag (say, "planet X aspects house Y by 5/9 only"), open a feedback ticket and we'll add the tag.
- Tags are case-sensitive (
/SUNIN10/works,/sunin10/doesn't). The picker and toolbar always insert correct casing. - Reading text is not auto-translated. Set the language picker to whatever language you're actually writing in; community browsers will see the badge so they know what to expect.
- Sharing publishes only the expression and the reading. Your name is shown as the author; nothing else from your account is exposed.
Sources
- The classical yoga compendium that ships in KarmaWheel (~120 yogas) is the inspiration; the constructor lets you encode any one of them yourself if it's not already in the catalogue, plus your own.
- The
/TAG/notation comes from the existing reading-tag system used for keyed text-rendering across KarmaWheel.
See also
- Classical Yoga Audit — the built-in yoga catalogue this feature complements
- Reading Tags — how the same tag system feeds the planet/sign reading library