Water Sort Bottle JSON Format Guide
Bottle JSON is a compact description of a Water Sort board. The outer array is the complete level, every inner array is one bottle, and values inside a bottle are written from the bottom layer to the exposed top layer.
Quick answer
The last value is the top layer
Write one inner array per bottle, list its layers from bottom to top, keep the same color ID everywhere, and use [] for a completely empty bottle.
[[1, 2, 3, 2], [3, 1], []]
In the first bottle, 1 is at the bottom and the final 2 is the layer that can pour next.
Water Sort JSON Anatomy
[The outer array starts the whole board[1, 2, 3, 2],Bottle A, bottom to top[3, 1],Bottle B, partly filled[]Bottle C, completely empty]The outer array ends the board[3, 1] already means two liquid layers and two open slots.A Complete Valid Example
This two-color example matches the Water Sort Solver default. Each color appears four times, no bottle exceeds capacity 4, and the outer array includes an empty bottle.
[
[1],
[2, 1, 2],
[1, 2, 1, 2],
[]
]
Bottle letters follow outer-array order: the first inner array is A, the second is B, and so on.
Why Bottom-to-Top Order Matters
Bottle A
Correct array
[4, 2, 1]
The solver reads 1 as the exposed top color. A legal move removes values from the end of this array.
If you enter [1, 2, 4], the JSON is syntactically valid, but it describes a different bottle with 4 on top.
Supported JSON Shapes
The simplest top-level array is the best format for manual entry. The current Water parser also accepts several object wrappers used by layouts and integrations.
| Shape | Example | Meaning |
|---|---|---|
| Direct array | [[1,2],[]] | The top-level value is the bottle list |
| bottles wrapper | {"bottles":[[1,2],[]]} | The bottles property is the bottle list |
| level wrapper | {"level":[[1,2],[]]} | The level property is the bottle list |
| data wrapper | {"data":[[1,2],[]]} | The data property is the bottle list |
| levelData wrapper | {"levelData":[[1,2],[]]} | The levelData property is the bottle list |
| Bottle object | {"colors":[1,2]} or {"layers":[1,2]} | An individual bottle stores its layer array in a property |
| Position metadata | {"colors":[1],"position":{"x":0,"y":1}} | Finite x/y values may preserve a positioned preview layout |
Wrappers do not change the move rules. After parsing, the solver still works with the same bottom-to-top bottle arrays and fixed capacity 4.
Choose Consistent Color IDs
Numbers
Short and easy to count
[
[1, 2, 1],
[2],
[]
]
Finite numbers are accepted. Zero is also a numeric color value, so never use 0 to mean an empty slot.
Strings
Readable but type-sensitive
[
["blue", "red"],
["red"],
[]
]
Strings are trimmed. Use the exact same spelling and type everywhere. Do not mix 1 with "1", or blue with Blue.
1 and string "1" can therefore look related in counts but fail to match as pour colors.Exact Water Solver Validation
Maximum bottles
The parsed list may contain at most 32 bottles.
Fixed capacity
Each bottle may contain from 0 to 4 layers.
Supported values
Every layer must be a finite number or a string.
At least one color
A level made entirely of empty bottles is rejected.
At least one open slot
The total layout must include some capacity for a legal pour.
Count warning
Counts other than 4 are highlighted, but they do not independently block Water search.
These checks validate the format supported by this tool. They cannot prove that every bottle was copied from the screenshot correctly or that a third-party game uses the same rules.
Common Bottle JSON Mistakes
[1, 2, 4]If the real bottle has 1 on top and 4 on the bottom, this order is reversed.
[4, 2, 1]The first value is the bottom; the last value is exposed.
[1, 2, null, null]null is unsupported and open space should not be stored.
[1, 2]Capacity 4 implies the two remaining slots automatically.
[[1,2],[2,1]]The search state no longer matches a board that includes a spare bottle.
[[1,2],[2,1],[]]The empty array is part of the level, not formatting noise.
Move JSON Between the Site Tools
Level Editor
Create or adjust a bottle layout visually, then export or copy its JSON.
Open the Level EditorWater Sort Solver
Paste JSON, compare the bottle preview, inspect count warnings, and search for moves.
Open the SolverSolution Replay
Open a share link created by the solver or Daily Water Sort. Replay does not provide a raw JSON text box.
Open ReplayCheck Your Bottle JSON
Paste the completed array into the real preview and compare every top layer before solving. If your source contains round balls rather than liquid bands, first read the rule comparison.