MonkerSolver Study Guide

MonkerGuide

One full guide from first account setup to advanced solver workflow

Account + install Viewer + exports Tree building Abstraction + memory Views + syntax Troubleshooting
No section matched your search. Try a broader term like viewer, memory, tree, syntax, or rake.

1. Quick Start

If you are new, your first goal is not a perfect giant tree. Your first goal is one complete working loop: create account, launch software, make a small tree, solve it, export it, and review it.

  1. Create your account and confirm you can log in.
  2. Launch the current solver package successfully.
  3. Build a small first tree, ideally HU NLHE 50bb with very simple actions.
  4. Start the solve and confirm the tree actually runs.
  5. Pause the run, export preflop for MonkerViewer, and point the viewer at your local ranges folder.
  6. Review one line cleanly from start to finish instead of jumping everywhere.
Best first milestone: one complete small workflow that works end-to-end. That teaches more than a huge tree that never converges.

2. Account, Requirements, and Software

Create your account

Create your account at monkerware.com/create.html. This guide keeps that link because account creation and access still happen there.

After signup, MonkerWare will send a verification code to your email. On first login, that verification code is typically what you use as your password. If the email does not arrive within a few minutes, check spam first. If it still does not show up, try a different email address before spending time debugging anything else.

Requirements

  • 64-bit Windows or macOS
  • At least 8 GB RAM, with more RAM needed as trees get larger
  • CPU speed matters because solve time scales with compute power
  • 64-bit Java is required for the current beta launcher workflow

Recommended MonkerGuy workflow

This guide assumes one workflow all the way through: use the current latest MonkerSolver beta and launch it with betaLauncher.jar. Older builds and the free version are outside the recommended MonkerGuy setup.

Use the solver for Building trees, solving games from different streets, exporting ranges, viewing EV, and studying strategy output.
Use the viewer for Navigating preflop ranges quickly, checking mixed or sampled strategy, and browsing exported local range folders.

3. Install, Java, and Memory Setup

Use the latest beta

Use the current latest MonkerSolver beta. That is the version this guide is written for, and it is the version you should assume whenever the guide mentions MonkerSolver.

  1. Download the current latest beta package.
  2. Unzip it to any folder.
  3. Run betaLauncher.jar.
  4. Log in and open your MonkerGuy files.

If betaLauncher.jar does not launch, install 64-bit Java and try again.

MonkerViewer setup

The viewer is simpler than the solver. The goal is just to get it running and pointed at the correct local ranges folder.

  • Windows: download MonkerViewer for Windows, install it, launch it, and log in.
  • Linux: download the jar build, open a terminal in the download folder, and run it with java -jar monkerviewer.jar.
  • macOS: run the jar build normally; if file access is blocked, Java or the viewer may need full disk access.

On macOS, folder-permission problems are often really Java permission problems. If the viewer cannot see or set the folder you want, full disk access is one of the first things to check.

MonkerSolver setup

For MonkerSolver itself, keep the workflow simple: current latest beta, unzip it, launch betaLauncher.jar, choose sensible RAM, and log in. Build your routine around that workflow only.

By default, most users end up working from the normal user MonkerSolver folders for trees, saved runs, and exported ranges. Keeping your working files in or near those default locations makes it much easier to load and save consistently.

Giving the solver more memory

Use MonkerSolver.cfg to control memory allocation. The setting -XX:MaxRAMPercentage=19 tells MonkerSolver what percentage of total system RAM it is allowed to use on startup.

  • Close the program first.
  • Open MonkerSolver.cfg in a text editor.
  • Change -XX:MaxRAMPercentage=19 to a higher value.
  • A practical target is usually 96 or lower to avoid crashes.
  • If you run multiple MonkerSolver instances, divide 96 by the total number of instances.
Example: if you are running 3 MonkerSolver instances, use roughly 32 for each one, because 32 x 3 = 96.

After editing the config, restart MonkerSolver and test the change.

4. Viewer and Local Ranges

What MonkerViewer is for

MonkerViewer is a fast range browser for preflop outputs. It is best for navigating charts, checking action splits, and reviewing exported local ranges without reopening full solves every time.

Basic MonkerViewer setup

  1. Create a folder on your computer for your MonkerGuy files.
  2. Create your MonkerWare account if you have not already.
  3. Download MonkerViewer for your platform and place it in that folder.
  4. Run MonkerViewer and log in.

You may need 64-bit Java before launching the viewer.

Loading your local ranges

  1. Download your MonkerGuy range package to your computer.
  2. Extract the archive into your MonkerGuy folder.
  3. Open MonkerViewer and go to Settings.
  4. Set the Ranges folder to your local MonkerGuy/Ranges folder.
  5. Open the Local tab to browse the ranges.
It can take 10+ minutes for the ranges folder to load and index. Keep the internal folder structure intact after extraction.

Useful viewer habits

  • Click the first branch of the tree first. That usually shows opening strategy from each position.
  • From there, either click the action headers above the charts or expand the tree manually with the folder controls.
  • Press Enter to switch between sampled and mixed strategy views.
  • Use the root branch first when you want opening ranges by position.
  • Use action headers to move node-to-node quickly instead of clicking randomly.
  • For PLO, use filtering because loading every combo at once is not practical.
  • Hover a specific hand when you want to inspect EV and the action split for that combo.

A clean way to study is to pick one line and stay disciplined. Example: BTN opens, BB 3-bets, BTN calls, then you inspect the next street. That is much easier to remember than randomly clicking through the tree.

Custom colors

You can define action colors in the viewer settings. Each line follows the pattern action = R,G,B. Example: 75% = 255,0,0 makes a 75% action red.

PLO filtering tip

PLO has too many hand combinations to browse cleanly all at once. Use the viewer filter and type the hand pattern you want, for example AA to show AAxx hands.

Extracting .7z files

If your archive is .7z, use a compatible extractor such as 7-Zip or PeaZip before loading the folder in MonkerViewer.

5. Build Your First Tree

Running your first sim

For the first example, keep it simple: NLHE heads-up, 50bb effective, basic preflop actions, and one simple postflop size. The point is to get a solve running so you understand the workflow from start to finish.

  1. Go to Tree -> New.
  2. Set Game = Hold'em, Limit = No Limit, Street = Preflop, Players = 2.
  3. Set Pot = 0, Stacks = 100, Blinds = 1,2, To act = SB.
  4. Use default auto config and create an empty tree.

Clean up the tree first

If Monker adds actions you do not want by default, remove them before adding new ones. A clean beginner workflow is to remove the default call action first so you start from a clean heads-up preflop shell.

Example custom remove filter:

pre:action=CALL

Add simple preflop sizes

Once the tree is clean, give the button simple options. A very beginner-friendly structure is limp plus minraise.

  1. Select the root node.
  2. Tick call and min.
  3. Click Add.

Then keep the rest of the preflop tree simple:

  • For 3-bets and 4-bets, add a pot-sized option using 100% on preflop nodes reached after a minraise.
  • For iso versus limp and limp 3-bet spots, again a pot-sized option is a fine beginner simplification.

Add simple postflop sizes

Before a preflop sim can run properly, you still need postflop sizings in the tree. For most beginner preflop work, the exact flop/turn/river sizes do not change the preflop answer as much as people think. A simple and practical starting point is to use a pot-size on all streets first.

  1. Untick all action boxes.
  2. Tick 100%.
  3. Right-click the root node.
  4. Use Add to all -> Postflop nodes.

First beginner solve settings

A simple beginner solve can be intentionally basic: No Rake, 30 buckets, Perfect / Small / Small, and about 5 threads to get the run started. After that, click Solve and start the sim.

When the solve is running, you can increase threads if your CPU can handle it. Watching CPU usage while you scale threads is a practical way to find a good level for your machine.

The AUTO action

A special AUTO action can morph into a recommended size for the node. It is useful when you want a sensible first draft quickly, but it is still worth learning custom filters because that is how you build cleaner and more intentional trees later.

Loading sims in MonkerSolver

Before loading a sim, make sure your RAM allocation is set high enough in MonkerSolver.cfg. Then open the Solve tab, use the folder icon, and navigate to the folder holding your .mkr files. Many users keep copies of the files they are actively working on in the default MonkerSolver saved-runs area just to keep browsing simple.

When opening a run, start with Load 1 street. Then check memory usage and move to 2 or 3 streets only if your machine clearly has the headroom. A very common mistake is assuming the sim loaded correctly when in reality later streets are blank because RAM was not sufficient.

6. Tree Building and Multiway Advice

Monker syntax in plain English

To build good trees, you need to be comfortable reading and writing Monker's rule syntax. It is not as scary as it looks once you think of it as a targeting language.

  • : means AND
  • ; means OR
  • = means equal to
  • == means assign action
  • * means all
  • ! means NOT
  • < and > mean less than and greater than

Common variables include street, player, spr, invested, committed, callers, action, numtoact, players, and street-specific counters like prebets, flopbets, turnbets, and riverbets.

Simple syntax examples

open:player=1 == 100% means if SB is opening, assign a pot-sized open.

pre:ipagg:bets=2 == 83% means if it is preflop, the acting player is in position as the aggressor, and this is a 3-bet spot, assign 83%.

street=flop == 66% means on any flop node, use a 66% size.

Use Add To and custom filters

You can right-click a node and use Add to so the selected actions are applied to broader groups of nodes, including custom filters. This is much faster than manually editing one branch at a time.

Save clean tree versions

Build your preflop tree first, save it, then experiment with postflop density. This gives you a clean rollback point when a larger version becomes too expensive.

Tree settings and config

Before building a serious tree, go to Tree -> Settings. The Auto Add settings control when folds, calls, all-ins, and raises are added automatically. This is one of the highest leverage places in the whole program because it controls how quickly the tree explodes.

Here is an example call configuration for 6max NLHE that allows overcalls in single-raised pots and additional callers on the flop:

(pre:(involved,players=2,bets=1:(player=1),bets=2:(player=0,player=1,player=2,ipagg:callers<1),bets=3:(player=0,player=1,player=2)),flop:(involved,numtoact<2),turn:(involved,numtoact<1),river:(involved,numtoact<1))::(pre:stakes<0.7,flop:stakes<0.75,turn:stakes<0.8,river:*)

You do not need to memorize that exact line on day one. The real lesson is that tree settings are where you decide who is allowed to continue and how wide later-street branching is allowed to get.

Antes and straddles

In MonkerSolver, antes are just dead money in the pot before the hand starts. A total ante contribution of the same size is strategically equivalent no matter how the site labels it. If you want to add a straddle, define a third blind and make the next player first to act.

Create and save filters

Once you understand basic syntax, saved filters become one of the biggest time savers in the whole program. Here is a simple flop filter you can use as a practical starting point:

street=flop:flopbets>1 == 100%
street=flop:flopbets=1 == 50%
street=flop:flopbets=0 == 66%

This means later flop raises can use pot, first raises can use half-pot, and first bets can use 66%. Once saved, you can apply the same filter across whole tree families instead of rebuilding it by hand.

Multiway trees should stay sparse

Large multiway preflop trees explode in size very quickly. Sparse postflop subtrees are strongly recommended so you can keep solve time and RAM under control.

  • Use a smaller postflop tree than you think you need.
  • Prefer one relatively large bet size over many sizes in large multiway solves.
  • Consider disabling low-value branches that bloat the tree, such as unnecessary small blind flats.
  • The cold-call setting can be used to reduce how many players continue to later streets.
If your real question is preflop behavior, spend your complexity budget on the preflop part of the tree and keep postflop sparse.

Detailed example: build a 6max NLH tree

Start by configuring your 6max NLH auto-add settings. Then create a new preflop tree for Hold'em, No Limit, 6 players, 1/2 blinds, 200 stacks, no antes, and create it empty.

A practical 6max NLH preflop filter structure looks like this:

open:player=1 == 100%
open == 60%

pre:ipagg:bets=2 == 80%
pre:bets=2:player=1 == 125%
pre:bets=2:player=2 == 135%

pre:!ipagg:bets=3 == 75%
pre:ipagg:bets=3 == 65%

Save that as a custom action such as Preflop, type it into the action box, tick it, then right-click the root and use Add to all -> Preflop nodes. After you click through the preflop structure and confirm the branches look right, save the .tree before you touch postflop. Then apply your saved Flop, Turn, and River filters to all postflop nodes.

Detailed example: build a 6max PLO tree with straddle

For the PLO example, use a 7-player tree with a straddle and 200bb depth. That means your call settings must also allow the straddle to participate correctly.

(pre:(involved,players=2,bets=1:(player=1,player=2),bets=2:(player=0,player=1,player=2,player=3,ipagg:callers<1),bets=3:(player=0,player=1,player=2),bets=4:(player=2)),flop:(involved,numtoact<2),turn:(involved,numtoact<1),river:(involved,numtoact<1))::(pre:stakes<0.7,flop:stakes<0.75,turn:stakes<0.8,river:*)

Save that as something like PLO - Straddle, then create a new tree: Omaha Hi, Pot Limit, Preflop, 7 Players, 1/2/4 blinds, 400 stacks, no antes. For a first pass, you can keep the preflop sizing simple with 100% across preflop nodes and then reuse your saved Flop, Turn, and River filters.

Detailed example: build a Limit Omaha-8 tree

For fixed limit games, the important thing is the betting cap logic. The following limit filter creates a 4-bet cap on each street:

limit=fixed: (pre:bets<6,post:bets<5)

Save that as LO8, create a new heads-up Omaha Hi/Lo fixed-limit tree, then simply add the bet action across preflop and postflop nodes.

Detailed example: build a postflop tree

Suppose BTN opens in 6max NLHE and BB calls. If the open was 2.5bb, the flop pot is 5.5bb. If both players started with 100bb, they each have 97.5bb left. Under the default chip convention where 1 small blind = 1 chip, double those values and create the tree as Pot 11, Stacks 195.

Then go to Ranges and define ranges for both players before you add your postflop bet sizes. That is the key difference between starting on the flop and starting preflop: your player ranges must already exist before the solve can mean anything.

If you are working from a MonkerGuy range pack, a BTN opening file such as UTG_Fold_HJ_Fold_CO_Fold_BTN_80%.txt can be used for the opener and UTG_Fold_HJ_Fold_CO_Fold_BTN_80%_SB_Fold_BB_Call.txt for the BB defend range. Once the ranges are in place, add flop, turn, and river sizing filters and the postflop tree is ready to run.

7. Abstraction and Memory

Rake settings

Monker uses rake in mchips, which can feel awkward at first. With default blinds of 1/2, 1 chip equals 1 small blind, so 0.5bb equals 1000 mchips and 1bb equals 2000 mchips. If you change the blind structure in the tree, you must also change the rake cap in mchips.

Average strategy and EV settings

Keeping average strategy or EV on does not change the strategic result of the simulation, but it changes what information is available to you afterwards.

  • Keep average strategy on if you want to force frequencies or use node locking later.
  • Keep EV on if you want to inspect the EV of individual hands on that street.
  • For many practical sims, 1 street of average strategy and 1 street of EV is a sensible default.

Why abstraction exists

Full poker games are usually too large for a personal computer. MonkerSolver reduces game size by merging strategically similar hands into buckets that must share frequencies.

Practical bucket guidance

A good working baseline is often 15 to 30 strength buckets per street. Use the Settings tab to see the required memory. If the tree is too large, either trim the tree or reduce abstraction cost.

Quality tradeoff

The goal of abstraction is to merge hands that would prefer similar actions anyway. In practice, bigger or richer abstractions tend to behave better, while weaker setups can introduce clear edge-case mistakes such as missing marginal opens or odd extra aggression.

Omaha abstraction details

  • Before the river, only suits that can still become flushes are tracked in detail.
  • On the river, only suits with at least three board cards are fully distinguished.
  • This reduces size a lot, but some strategically different blocker cases will still be merged.
When memory is too high Trim tree size first. Then reduce bucket count only as much as needed.
When quality is too rough Use a simpler tree that you can afford at a better abstraction level.

Enable ICM

For tournament or payout-sensitive work, tick the ICM option and enter the payout structure. That really is the core setup step, but the bigger point is to make sure you are not accidentally solving a chipEV tree when the spot you care about is payout-sensitive.

8. Solving and Reviewing Output

Starting the solve

Once the tree and settings look correct, go to the Solve tab and start the run. If you are solving a postflop tree, select the board cards first.

Convergence guidance

Large preflop trees can take days. A common working guideline is around 10x node count iterations before the output starts to become sound, but always verify the exact spots you care about.

Reviewing strategy

  • Open the current node and inspect action frequencies directly.
  • Click action headers to analyze the range for that action.
  • Use the equity graph when you want a cleaner high-level view of the current spot.
  • Use board overview when you want to compare how the spot behaves across boards.
Do not wait for a solve to be "perfect" before learning from it. Instead, watch whether the exact nodes you care about are stabilizing.

9. Exporting and Study Workflow

Exporting safely

When you still want stable output, do not fully stop the run. Pause it or set threads to 0, then export.

  • Full preflop export: export for MonkerViewer when you want a full chart package.
  • Single-node export: export a specific node when you want CSV, PPT, PIO, or custom output.

Saving a simulation

Do not stop the simulation before saving. Pause it or set threads to 0 first. There is no universal moment when a sim becomes "done", so the practical question is whether the strategy in the nodes you care about is still moving a lot.

  • Save for storage when you want a compact archive.
  • Save for further calculation when you plan to continue solving later.

A practical MonkerGuy-style saving guideline is roughly:

  • Preflop HU: 100 I/N+
  • Preflop 6max: 50 I/N+
  • Preflop 8max: 40 I/N+
  • Postflop: 30 I/N+

Those are not hard laws. They are practical saving guidelines. Watching the exact ranges you care about, along with volatility, is often more useful than obsessing over a single target number.

Loading saved runs

When opening full .mkr solutions in MonkerSolver, use the current latest beta via betaLauncher.jar and start by loading 1 street only if RAM is tight. Empty later streets usually mean you loaded more than memory allows.

  1. Run the current latest beta through betaLauncher.jar.
  2. Download your .mkr files and open them from the Solve tab.
  3. Start with 1 loaded street first, then add more only if RAM allows it.
  4. Pause before export or save, or set threads to 0.

10. Rake and Raise Tools

Custom rake cap

Monker uses mchips, which means chips multiplied by 1000. If blind size changes, the rake cap in mchips must change too.

  • mchips = chips x 1000
  • bb_chips = 2 x sb_chips
  • cap_mchips = cap_bb x bb_chips x 1000
Blind setup 1 BB in chips 1 BB cap in mchips
1 / 2 2 chips 2000 mchips
5 / 10 10 chips 10000 mchips
50 / 100 100 chips 100000 mchips
Cap: 15000 mchips (for 5/10 with 1.5bb cap)

Raise size formula

Monker raise sizing uses this pattern: raise% x (all previous bets + previous bet) + previous bet

Raise to: 13.5 chips
Example: 75% x (7.5 + 4.5) + 4.5 = 13.5

11. Views and Custom Abstractions

What views do

Views group hands into categories so you can see aggregated EV, combo count, and action frequencies instead of only looking at one combo at a time.

Where views live

Put view files in the Views subfolder. Each file is a .txt file, and the filename becomes the view name in the software.

Basic file format

  1. Optional first line: an integer for label length.
  2. Category name on one line.
  3. Category syntax on the next line.
  4. Repeat for more categories.

If a hand matches several categories, it is assigned to the first matching category. Hands that match none fall into Other.

Custom abstraction

Custom abstractions use the same general idea. Hands in the same category are forced to share action frequencies. This reduces tree size and can improve speed enough to make difficult solves practical. River is often the best place to abstract aggressively because draws are resolved and categories are easier to define.

12. Syntax Reference

Core operators

  • : means AND
  • ; means OR
  • ! means NOT
  • () controls priority
  • == assigns an action or size
  • * is a wildcard

Useful variables

Common variables include street, player, bets, spr, action, callers, numtoact, invested, and committed.

Expanded syntax tokens

Token Meaning
#n1 to #nf Hand strength ranking buckets from strongest downward.
#b1, #b2 Top paired board ranks.
#c The rank of board trips or quads.
£ The suit of the made flush suit when three or more board cards share a suit.
^ The flop flush-draw suit when exactly two flop cards share that suit.
~ The backdoor flush-draw suit.
#£1 to #£9 Highest to lower possible flush-card ranks on the board.
#1 to #5 Highest to lower unpaired board-card ranks.
#0 The rank above the highest board card.
#s1 to #s8 Hole-card straight ranks from highest downward.
#sf1 to #sf4 Hole-card straight-flush ranks from highest downward.
syntax_x A blocker expression such as AA_50 or (#n1,#n2)_35 for blocking a percentage of a syntax group.
Example filter ideas

open:player=1 == 100% for an SB pot open.

pre:ipagg:bets=2 == 83% for an in-position 3-bet sizing template.

street=flop == 66% for a broad flop sizing assignment.

13. Advanced Workflows

Scripting and volume work

If you plan on running many postflop sims, scripting becomes essential. The workflow is: build the postflop tree you want, define ranges for each player, save the .tree with ranges included, then open the Scripting window from the Solve tab.

In the script setup, list the boards you want to solve separated by commas, and list stack sizes in mchips for each player. If all players are equal depth, one stack value is enough.

Target tells Monker when to stop and save each board before moving to the next. Around 30 I/N is a reasonable starting point for many postflop projects. Reset avg after helps keep early inaccurate results from distorting final EV output. A common practical choice is to reset halfway to the target, for example reset at 15 if target is 30.

Node locking and exploit work

Use node locking when you want best response against a known leak. The cleanest workflow is baseline solve, lock one leak, re-solve, then compare exact nodes side by side.

Example: in a 6max NLHE game, if your notes suggest BB is defending far too little versus BTN opens, you can lock BB's defend behavior and let Monker recalculate BTN's best exploitative opening strategy.

A simple way to do this is to navigate to the exact fold node you want to lock, right-click it, choose Lock strategy, then lock the frequency. For example, if BB should be folding 75% versus a BTN open in your exploit model, you can lock the fold branch to 75%.

Card-removal preservation

If you want a very specific matchup, such as SB versus BB, without paying for a giant unrestricted tree, you can lock upstream ranges first so card removal is still represented while the target spot stays focused.

The practical version is: open the original tree, strip unnecessary downstream actions from earlier positions, then lock the open ranges of earlier players one by one. That preserves the card-removal logic while focusing the solve on the exact pair you care about.

One-lock rule

When learning exploit workflows, change one lock at a time. If you lock too many things at once, you will not know which lock caused the strategic change.

MonkerViewer .RNG file naming

MonkerViewer range filenames are encoded with numeric prefixes that loop by betting round and active player.

  • 0 means Fold
  • 1 means Call
  • 2 means Pot
  • 3 means All-in
  • 4 means 50%
  • 5 means Min
  • 9 means 75%
  • Other numeric values can map to chip-based raise sizes

If a filename starts with 40, the next digits represent a percentage-based raise size. Otherwise, chip-based raise sizes are encoded numerically as the size offset used by MonkerViewer's file scheme. The naming then loops across rounds of betting for players still active in the hand, and the percentages stored inside the files are range-weighted.

14. Troubleshooting and FAQ

Later streets are empty

You probably loaded more streets than available memory allows. Reload fewer streets first.

The viewer is not showing local charts

Recheck the ranges folder path, wait for indexing, and confirm the folder structure stayed intact after extraction.

Memory usage is huge or convergence is too slow

Trim the tree, especially low-value postflop branches. Sparse postflop subtrees and fewer buckets are usually the first fixes.

Rake looks wrong

Recalculate the cap in mchips. Most rake problems come from using the wrong chip unit after changing blind sizes.

I cannot find the exact solution I need

Email support@monkerguy.com with the game format, player count, stacks, rake, ante structure, and any special tree requirements.

Real-time policy reminder

Some poker rooms explicitly ban real-time use of solver-style tools and range viewers. Always follow the rules of the site you play on.