MonkerGuide
One full guide from first account setup to advanced solver workflow
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.
- Create your account and confirm you can log in.
- Launch the current solver package successfully.
- Build a small first tree, ideally HU NLHE 50bb with very simple actions.
- Start the solve and confirm the tree actually runs.
- Pause the run, export preflop for MonkerViewer, and point the viewer at your local ranges folder.
- Review one line cleanly from start to finish instead of jumping everywhere.
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.
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.
- Download the current latest beta package.
- Unzip it to any folder.
- Run
betaLauncher.jar. - 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.cfgin a text editor. - Change
-XX:MaxRAMPercentage=19to 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.
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
- Create a folder on your computer for your MonkerGuy files.
- Create your MonkerWare account if you have not already.
- Download MonkerViewer for your platform and place it in that folder.
- Run MonkerViewer and log in.
You may need 64-bit Java before launching the viewer.
Loading your local ranges
- Download your MonkerGuy range package to your computer.
- Extract the archive into your MonkerGuy folder.
- Open MonkerViewer and go to Settings.
- Set the Ranges folder to your local
MonkerGuy/Rangesfolder. - Open the Local tab to browse the ranges.
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.
- Go to Tree -> New.
- Set Game = Hold'em, Limit = No Limit, Street = Preflop, Players = 2.
- Set Pot = 0, Stacks = 100, Blinds = 1,2, To act = SB.
- 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=CALLAdd simple preflop sizes
Once the tree is clean, give the button simple options. A very beginner-friendly structure is limp plus minraise.
- Select the root node.
- Tick
callandmin. - 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.
- Untick all action boxes.
- Tick
100%. - Right-click the root node.
- 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.
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.
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.
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.
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.
- Run the current latest beta through
betaLauncher.jar. - Download your
.mkrfiles and open them from the Solve tab. - Start with 1 loaded street first, then add more only if RAM allows it.
- 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 1000bb_chips = 2 x sb_chipscap_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 |
Raise size formula
Monker raise sizing uses this pattern: raise% x (all previous bets + previous bet) + previous bet
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
- Optional first line: an integer for label length.
- Category name on one line.
- Category syntax on the next line.
- 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
MonkerViewer .RNG file naming
MonkerViewer range filenames are encoded with numeric prefixes that loop by betting round and active player.
0means Fold1means Call2means Pot3means All-in4means 50%5means Min9means 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.