Rules

Every mechanic, written out. Nothing here is a summary of something else — these are the numbers the server actually uses.

The basics

Every player is on one of seven teams: RED, GREEN, BLUE, PURPLE, YELLOW, ORANGE or PINK. You pick one when you join and it does not change.

The map is cut into fixed squares roughly 300 metres on a side. You claim a square for your team by being inside it and reaching the mesh from it — not by being there, and not by seeing it on a map. The radio has to actually get out.

A season runs six months. The team holding the most ground when it ends wins. Inside the season, each calendar month has its own winner, so there is always something close to play for.

Claiming a square

Everything starts with a ping: your position, plus which mesh nodes that transmission reached. Each node it reached is worth a tenth of a point, and a single ping can never be worth more than one point no matter how many it reached.

Per node reached0.1 points
Most one ping can earn1.0 points
A ping that reached nobodynothing at all

That last line is the rule people trip over. Being somewhere is not enough. A ping from a valley with no coverage is recorded, costs you nothing, and claims nothing.

Which nodes count differs by protocol and it is inverted between them — see MeshCore and Meshtastic.

Taking and holding

Points accumulate per team, per square. Ownership follows from them.

  • Unclaimed ground goes to the first team to paint it.
  • A square that just changed hands cannot be taken for fifteen minutes, whatever anyone scores. A capture you have to defend from the second it lands is not a capture.
  • After that it falls to whoever out-scores the team currently holding it. Only the holder's score matters — not the highest score among the other six. With seven teams there is no single rival, so each attacker is measured against whoever actually has the ground.
  • The first time a new person paints a square for their team it is worth an extra half point. Three people who each visit once beat one person who visits three times.
  • The same person cannot repaint the same square inside five minutes. Parking in one spot and transmitting does not run up a score.
  • Scores fade by a quarter point a day, toward zero. This is why a six-month season does not calcify: ground painted once and never revisited is worth nothing within weeks, so what you hold always means what you have reached recently.
Protection after a capture15 minutes
Same player, same squareonce per 5 minutes
New painter bonus+0.5 points, once per player per square
Decay0.25 points per day, floor of zero

Seasons

A season is 180 days. The two boards run their own seasons on their own clocks — the current MeshCore season ends 14 February 2027 and the Meshtastic one a day later.

A team's standing is the squares it holds plus the check-in points its players have earned. Both count, and they count in the same units: one square held is worth the same as one check-in point.

When a season ends, the board resets and check-in points reset with it. Streaks do not — see streaks.

The weekly net

There is a net every Wednesday evening, 17:00 to 23:59 Boise time. Checking in during that window earns your team points on top of any ground you hold.

WhenWednesdays, 17:00–23:59 America/Boise
Base value25 points
How oftenonce per net, per player
On MeshCorepost in the #weekly-net channel
On Meshtasticsend a message containing #freq51

Posting five times earns once, the same as everyone else. A message before 17:00 or after midnight does not count — the window is the window.

This is a genuine way to play rather than a consolation prize. Points land in the same team total as squares, so a night on the net contributes whether or not you ever leave the house.

Streaks

Turning up every week is worth more than turning up once. The bonus starts on your second consecutive net and stops growing after the sixth.

Consecutive netBaseBonusTotal
1st2525
2nd25530
3rd251035
4th251540
5th252045
6th and after252550

Miss a net and you start again at 25.

A week where the net does not happen at all costs you nothing. A Wednesday only counts as a net if somebody checked in. If everyone skips a holiday week, nobody's run breaks.

Your streak survives a season boundary. The points it earned reset with everything else, but the run itself is a record of showing up, not territory. Streaks are counted per board — a MeshCore run and a Meshtastic run are separate.

Monthly results

Each calendar month, Boise time, gets its own result on the results page.

A month is judged when it ends, not as it goes. Nothing is shown for the month in progress except when it closes. An award you can watch changing hands daily is not an award.

A month is scored on the month. Ground taken and points earned between its own dates — never a snapshot of the season standings. If it were a snapshot, whoever led in the first month would lead in all of them and none of it would mean anything. Falling behind early never puts the next month out of reach.

Ties are refused rather than split. If two people share the lead for an award, nobody gets it that month.

The honors

Each month hands out the following, alongside the team standings.

Month Winner
The team that gained the most points that month — squares captured plus check-in points earned.
Top Attacker
Took the most squares off other teams. Claiming empty ground does not count here.
Top Defender
Won back the most squares their team had lost. A capture counts as a defence when the previous capture of that same square took it from the team now taking it back.
Team Attacker & Team Defender
The same two awards, given within each team, so a strong team does not sweep everything.
Explorer
Claimed the most squares nobody had ever claimed. Easy early in a season when the whole map is new, genuinely hard once it fills in.
Frontier
Claimed the most squares more than twenty miles beyond the edge of any town. Every Frontier square is also an Explorer square, so going remote counts toward both. Twenty miles out is where coverage runs out, so expect months where nobody earns it.
Top NetOp
Earned the most points from checking in to the weekly net.
Most Consistent
Held the longest run of consecutive nets during the month.
Quick Fingers
Checked in fastest after the net opened, averaged across the month. Needs at least two check-ins — one lucky night does not win it.

Registering a radio

Nothing you transmit earns anything until the radio it came from is registered to you. Every ping and every check-in is credited through that link.

On MeshCore, your radio is identified by its contact key — the first eight characters of its public key. MeshMapper binds it for you the first time you wardrive, provided its "Include Contact Key" setting is on. That setting being off is the single most common reason a player sees nothing happen. You can also pick your node from a list on the join page, or type the eight characters in yourself.

On Meshtastic, your radio is identified by its node ID, and you add it yourself on the join page. It cannot bind itself, because the packets MeshWars reads carry nothing that points back to you.

A radio belongs to one player. If a contact already registered to somebody else turns up under your key, the ping is dropped rather than credited — to either of you.

Your API key is shown once and only a hash of it is stored, so it cannot be recovered. A MeshCore player can read theirs back out of MeshMapper's own settings; otherwise an operator can issue you an extra key without breaking the one you have.

Where it counts

Play is bounded to a box covering the western United States and Texas.

North49.29° — the Canadian border
South25.80° — the southern tip of Texas
West−125.00° — past the Pacific coast
East−93.50° — eastern Texas

A ping from outside the box is discarded before anything else happens — it claims nothing and it does not register your radio. The live outline is drawn on the about page.

Fair play

Three mechanics exist to keep the game about reaching the mesh. All of them are narrow on purpose.

Aircraft

A radio at altitude reaches an absurd number of nodes, which would make the exploration awards meaningless. MeshWars works out your speed between consecutive positions, and anything moving faster than roughly 100 mph is marked as airborne.

Those squares still count as territory — the radio genuinely reached those nodes, and that is what territory measures. They do not count toward Explorer or Frontier, which are about reach and effort rather than reception. Nothing is taken away and nobody is penalised.

An implausibly large jump between two positions is treated as a bad GPS fix rather than a flight, so a phone that briefly locates you in the next county does not disqualify a legitimate remote claim. Nothing catches a hovering aircraft; that is a known gap.

Automated check-ins

Quick Fingers is an award for reacting quickly to an event that happens on a schedule, which is an open invitation to a cron job. So it ships with its own defence.

A person posting from a phone lands somewhere different each week — scattered across minutes. A script fires at the same offset every time, to within a second or two. MeshWars looks at how much a player's check-in timing varies across the month, and when it barely varies at all over enough nets, that player is quietly skipped for Quick Fingers.

That is the whole extent of it. It is not a penalty, it is not an accusation, and it affects nothing else — the check-in still earns its points, the streak still counts, every other award is unaffected. A false positive costs somebody one novelty award, whereas punishing anyone on the strength of a statistical hunch would mean settling arguments that cannot actually be settled.

Sharing keys

A contact key bound to one player cannot earn for another. If a ping arrives under one player's API key carrying a radio registered to somebody else, it is dropped and logged rather than credited to either of them.

MeshCore and Meshtastic

Two boards, one game. Same seven teams, same grid, same scoring table, same rules on this page. What differs is how your position reaches MeshWars — and it is inverted between them.

MeshCoreMeshtastic
How position arrivespushed — MeshMapper forwards a copy of your wardrivepulled — MeshWars polls a public meshview instance
What earns pointshow many repeaters you heardhow many MQTT feeders heard you
Registeringbinds itself on your first wardriveyou add the node ID yourself
Net check-in#weekly-net channelany message containing #freq51

The inversion is not a design choice, it is what each network lets anyone observe. MeshCore tells you what your radio reached; Meshtastic tells you who logged your radio.

Everything else — teams, squares, capture, decay, seasons, the net, streaks, the honors — is identical.

Everything on this page is also available as data. If you want to build a mesh bot, a Discord bot or a dashboard on it, there is a read API — keys are free, just ask. See the API documentation.