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 can switch to a different one yourself once per calendar month from the setup-check panel on the Join page. Squares you're holding stay with the team you're leaving — only you move, not your ground — while your check-in points, exploration points and streak all come with you.
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 reached | 0.1 points |
|---|---|
| Most one ping can earn | 1.0 points |
| A ping that reached nobody | nothing 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 matches or 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.
- A repeater you've already been credited for on a square stops paying out again for five minutes. A repeater you haven't been credited for yet still scores the moment it's heard, even seconds later — so parking in one spot and transmitting on repeat does not run up a score, but hearing a genuinely new repeater on the same visit does still count. The per-visit point cap still applies across the whole window either way.
- 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 capture | 15 minutes |
|---|---|
| Same repeater, same player, same square | once per 5 minutes |
| New painter bonus | +0.5 points, once per player per square |
| Decay | 0.25 points per day, floor of zero |
Seasons
A season is 180 days. The two boards run their own seasons on their own clocks and started on different days, so they do not end together. The MeshCore season's end date is shown on the about page, read live rather than repeated here where it would go stale.
A team's standing is the squares it holds, plus the check-in points its players have earned, plus the points they have earned at Places Worth Going. All three 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
Each mesh community that plays MeshWars runs its own net, on its own schedule and its own channel. Checking in during your net's window earns your team points on top of any ground you hold. A net only counts once an operator has configured it — posting on a channel nobody has set up as a net earns nothing, however net-like it looks. See the about page for which communities currently have one configured.
| When | set per community — check your local net's published day and hours |
|---|---|
| Base value | 25 points |
| How often | once per net, per player |
| On MeshCore | post in your community's net channel |
| On Meshtastic | send a message containing your community's net hashtag |
Posting five times earns once, the same as everyone else. A message outside your net's window 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 net | Base | Bonus | Total |
|---|---|---|---|
| 1st | 25 | — | 25 |
| 2nd | 25 | 5 | 30 |
| 3rd | 25 | 10 | 35 |
| 4th | 25 | 15 | 40 |
| 5th | 25 | 20 | 45 |
| 6th and after | 25 | 25 | 50 |
Miss a net and you start again at 25.
A week where the net does not happen at all costs you nothing. Your net's day 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.
Places Worth Going
Some squares aren't just squares. A summit, a park or a landmark inside one makes that square worth more than the ground around it. None of it is invented for the game: summits come from Summits On The Air, parks from Parks On The Air and the national protected-areas database PAD-US, and landmarks from OpenStreetMap.
Scored by effort, not by category
What a place is worth depends on how far it made you go, not what kind of place it is. Anywhere inside a town's own limits, a park or a landmark is worth five points, the same nickel whether you drove up to it or walked to the courthouse. Step outside a town and the category starts to matter. A summit is scored differently from both — see below.
| Inside a town | Outside a town | |
|---|---|---|
| Landmark | 5 | 10 |
| Park | 5 | 25 |
| Summit | 50 to 100, by height | 50 to 100, by height |
A summit is the one place whose value is never flat and never falls back to the in-town nickel: it scores by elevation everywhere, inside a town or out. It slides evenly from 50 points at 6,000 feet and below to 100 points at 9,000 feet and above — a peak at 7,500 feet is worth 75. A peak is a peak whether or not you can park a car next to it: unlike a park or a landmark, being inside a town's limits does not flatten a summit's value, because the climb it took to reach the top doesn't change depending on where the town line was drawn around its base.
That is on purpose. A summit you can park a car next to and a hot spring at the end of an hour of dirt road are both "a summit" and "a landmark" by category, but they are not the same errand. Scoring by effort instead of by category means the game rewards the drive, not the label, while a town's own parks and landmarks are worth showing up for but not worth grinding.
The weekly cap
| Per place | one credit, per person, per week |
|---|---|
| Weekly ceiling | 100 points per person, whatever the mix |
| To score | a scoring ping, same as claiming a square — being there is not enough |
| Aircraft | excluded on MeshCore — see fair play |
The ceiling is a budget, not a switch. Every place you reach spends its value out of the hundred, but if a place is worth more than what's left of your week, it doesn't turn you away — it just pays out the rest of the budget and caps you there. So a 100-point peak spends the week in a single trip, and two 75-point peaks get you the same place: the first leaves 25 behind, and the second pays you that remaining 25 and finishes your week. Once you've reached the ceiling this way, that second peak has used its one credit for the week — it doesn't sit there for the other 50 to be picked up later, the same week.
Ten remote landmarks, four remote parks or one 9,000-foot summit all reach the ceiling. Anything lower leaves room for something else alongside it, which is the point: a big peak is a week's work, a lower one is an afternoon with room left over.
Points go to your own Explorer Score and to your team's total, the same shape check-in points already have.
Explorer is not a monthly honor. It is the name of an activity and of a ranking — the Explorer tab under Top Operators, alongside Wardrivers and NetOps. Your Explorer Score runs the length of the season and counts toward your total score, so it is never reset or scored month by month the way the honors below are. The monthly honors built on places count visits instead of points: Tourist, Park Hopper and Peak Tagger.
Which square scores
A landmark or a summit scores the single square its point falls in. A park with a mapped boundary at least the size of a grid square scores every square more than half inside that boundary — skirt its edge and only the squares mostly inside it count. A park smaller than a square, or without a boundary on file at all, scores the square containing its point instead, the same as a landmark. Close to two in five parks have no boundary data on file; those still score, just by that simpler rule.
One square can carry more than one place — a landmark standing inside a large park, say. Only the most valuable one scores. Places do not stack: the lesser place is dropped rather than paid alongside the better one, because one trip to one square is one errand and it pays once. That holds even if the more valuable place gets capped by what's left of your week — the cheaper place on the square still doesn't step in. If you already collected that square's place this week, it simply pays nothing on a repeat visit. Two places of exactly equal value on one square always resolve to the same winner, every week and for every player.
What makes the list
The list is deliberately narrow, and three things you might expect on it are not. Trailheads are left off because a trailhead is where you start going somewhere, not somewhere to go. Fire lookouts are left off because the peak a lookout stands on is already the summit you get credit for, and scoring both would pay you twice for one walk — for the same reason, a landmark sitting within about a hundred metres of a scoring summit is dropped in favour of the summit.
Summits have to have a real name. Roughly a fifth of the source list records unnamed peaks by their height instead of a name, or by a placeholder like "Peak 8", and those are left out — unless the number is 13,000 feet or more, where a peak genuinely is known by its elevation.
The weekly rotation
Summits and every park with a real, mapped boundary are always live. Landmarks, and the small parks whose mapped boundary doesn't fill a whole square, rotate instead: only some of them are live in any given week, chosen the same way for every player, with a minimum spacing between live picks so a dense downtown can't be farmed by visiting one block. A park with no boundary on file isn't treated as small for rotation, even though it scores like one — the game doesn't actually know its size, so it stays always active instead of guessing, the same as a summit.
The rotation turns over on the same weekly reset as the net and everything else — one clock for the whole game. A landmark that's live this week may not be next week, and that's deliberate: the point is to keep sending you somewhere new, not to hand out a fixed list once and let it go stale.
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. The standings are the ground each team holds the instant the month closes, not captures made during it. Check-in points and Places Worth Going points earned that month sit alongside squares held as their own columns — the three are never added into one figure. None of it is a snapshot of the season standings: if it were, whoever led in the first month would lead in all of them, and falling behind early would put every later 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.
- Largest Territory
- The team holding the most ground when the month closes. (Called Month Winner, and scored on points gained instead of ground held, until 2026-08-31.)
- Longest Road
- The team holding the longest unbroken chain of squares, linked on sides or corners, provided the chain reaches 200 squares. A single rival square landing in the middle of a long chain splits it in two, so this is the one honor another team can take off you without out-scoring you anywhere.
- Empire Builder
- The player holding the most ground they painted themselves.
- 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 Builder, Team Attacker & Team Defender
- The same three awards, given within each team, so a strong team does not sweep everything.
- Tourist
- Visited the most landmarks that month. Every visit counts the same regardless of how many points it earned.
- Park Hopper
- Visited the most parks that month, the same way Tourist counts landmarks.
- Peak Tagger
- Visited the most summits that month, the same way Tourist counts landmarks.
- Frontier
- Claimed the most squares more than twenty miles beyond the edge of any town. Any capture out there counts, attack or retake or first claim alike, but twenty miles out is where coverage runs out, so expect months where nobody earns it.
- Quick Fingers
- Checked in fastest after the net opened, averaged across the month.
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.
| North | 49.29° — the Canadian border |
|---|---|
| South | 25.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
A few mechanics exist to keep the game about reaching the mesh. All of them are narrow on purpose.
How precise your position has to be
A Meshtastic radio can be set to report its position roughly rather than exactly, and some are shipped that way. A rough position can put you anywhere inside a box a kilometre or more across, which is several squares wide — so a position that is not precise enough to say which square you were in claims nothing at all.
Squares are about 300 metres, so a position has to be good to roughly 180 metres or better to count. In the Meshtastic app that is the channel's position precision setting: leave it at full precision, or at least at the step that says within 182 metres. A packet that does not say how precise it is gets the same answer, because there is nothing to check — and the packets that omit it are the ones carrying no usable position in the first place.
This is a Meshtastic setting and it has no MeshCore equivalent. If you register a radio, drive somewhere with coverage, and nothing appears on the map, this is the first thing to look at.
Aircraft and impossible jumps
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 the two boards act on that number differently, because they can afford to.
On MeshCore, 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. What they do not count toward is Places Worth Going, and the awards built on reach and effort: Tourist, Park Hopper, Peak Tagger and Frontier. Nothing is taken away and nobody is penalised. Above roughly 900 mph the jump is read 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.
On Meshtastic, there is no airborne marking at all. A position that would have needed more than roughly 200 mph since your last one is thrown out instead, and claims nothing. The bar is deliberately far above MeshCore's: refusing a position costs you a square where labelling one does not, and two positions a few seconds apart in neighbouring squares can read as a surprisingly high speed from the grid alone. A refused position is also not used as the starting point for the next check, so one bad fix cannot make your next honest ping look like the impossible one.
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 — plus two checks on the ping itself, at the bottom of the table.
| MeshCore | Meshtastic | |
|---|---|---|
| How position arrives | pushed — MeshMapper forwards a copy of your wardrive | pulled — MeshWars reads coverage from FreqMapper |
| What earns points | how many repeaters you heard | how many MQTT feeders heard you |
| Registering | binds itself on your first wardrive | you add the node ID yourself |
| Net check-in | your community's net channel | your community's net hashtag |
| Position precision | no setting to get wrong | must be good to ~180 m or the ping is refused |
| Going too fast | over ~100 mph is labelled airborne; the square still counts | over ~200 mph is refused outright; nothing is labelled airborne |
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. The two rows at the bottom of that table are the only places the boards judge a ping differently, and both are explained under fair play.
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.