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
Do not add placeholders for open space. A half-filled bottle contains only its visible liquid values. Capacity is supplied by the tool, so [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],
  []
]
Color 14 layersColor 24 layersEmpty bottles1
A B C D

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

Top: last value = 1Middle: 2Bottom: first value = 4

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.

ShapeExampleMeaning
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.

Important implementation detail: the count display groups IDs through their text form, while Water move matching compares the stored values directly. Numeric 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

Wrong: top to bottom
[1, 2, 4]

If the real bottle has 1 on top and 4 on the bottom, this order is reversed.

Correct: bottom to top
[4, 2, 1]

The first value is the bottom; the last value is exposed.

Wrong: padded empty space
[1, 2, null, null]

null is unsupported and open space should not be stored.

Correct: visible liquid only
[1, 2]

Capacity 4 implies the two remaining slots automatically.

Wrong: omitted empty bottle
[[1,2],[2,1]]

The search state no longer matches a board that includes a spare bottle.

Correct: include every bottle
[[1,2],[2,1],[]]

The empty array is part of the level, not formatting noise.

Move JSON Between the Site Tools

Build

Level Editor

Create or adjust a bottle layout visually, then export or copy its JSON.

Open the Level Editor
Check

Water Sort Solver

Paste JSON, compare the bottle preview, inspect count warnings, and search for moves.

Open the Solver
Review

Solution Replay

Open a share link created by the solver or Daily Water Sort. Replay does not provide a raw JSON text box.

Open Replay

Check 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.

FAQ

Which end of a Water Sort array is the top?

The last value is the exposed top layer. The first value is the bottom layer, so the array is written in the same order that a stack is built from bottom to top.

How do I write an empty bottle?

Use an empty inner array: []. Do not use zero, null, a blank string, or four placeholder values. A numeric zero is treated as a color ID, not empty space.

Can I use color names instead of numbers?

Yes. The Water Sort parser accepts finite numbers and strings. Use one consistent value and type for each visible color across the entire layout.

Can I mix 1 and the string 1?

Do not mix them. Count displays convert IDs to text, while legal move comparisons preserve the original value type. Mixing numeric and string forms can therefore produce misleading counts and mismatched moves.

Does the solver require exactly four layers of each color?

The current Water tool warns when a color count is not four, but it does not block search for that reason alone. Standard capacity-four puzzles normally use four copies, so verify every mismatch.

What wrapper objects does the Water Sort Solver accept?

Besides a top-level bottle array, it can read an array stored under bottles, level, data, or levelData. Individual bottles may be arrays or objects with colors or layers arrays.

Can I paste raw bottle JSON into Solution Replay?

No. Raw bottle JSON is loaded in the Water Sort Solver or built in the Level Editor. The Replay page opens compressed share data created by the solver or Daily Water Sort.

Explore Water and Other Sorting Games

Choose the sorting style that matches the way you want to play.