A dartbotthat throws like a person.
Ask darts players what bothers them about dartbots and the answers are always the same: the bot never misses a double, its average is all over the place, or it simply takes a number off its score every visit. Rival was built the other way round. He throws darts.

He aims, then he throws
For every dart Rival picks a target, the way a player does: the treble 20 while there are points to score, a set-up shot when a finish comes near, a double when he can check out. Then the dart lands somewhere around that target. Most land close, some drift a bed to the left or right, and a few go wide.
That spread is what makes a real board hard. Go for the treble 20 and a slight drift gives you a single 5 or a single 1. Go for double 16 and a few millimetres put you outside the wire. Rival deals with exactly that, which is why his visits look like yours: 60, 26, 85, 41, the odd ton.
You see every dart
When it is his turn the board fills the screen. A dashed ring shows where he is lining up, the dart flies in, and a small label tells you what it hit. Three darts, a short pause to see where they all went, and the turn is yours. In a hurry? Skip to your turn with one tap and his whole visit lands at once.
It is the same feeling as standing next to someone at the oche: you see the near misses, the lucky bounces into the treble and the double that would not go in.
He finishes like a player
On a finish Rival follows a checkout route the way players learn them, with the same doubles they like: double 16, double 20, double 8. Miss the first dart at a double and he goes for the next one; land on an odd number and he sets himself up again. That is why he misses doubles as often as you do, and why his checkout percentage looks like a person's.
He adapts to your game
You start by telling the app roughly what you average. Rival starts there. After every leg he moves towards the average of your last ten legs, but never more than six points at a time, so one great leg or one bad night does not swing him.
He has a level and a rank you can see: pub player, club player, league player, tournament player and pro. Improve and he climbs with you, which keeps every match close enough to matter.
And he talks back
Rival is not a number on a screen. He has a face, he keeps count of your head to head, and when something is at stake he says so: on a finish, after a bust, after a big score. He stays quiet the rest of the time, because a line only means something when it is rare.
Matches that end in a result
Every game against Rival is a 501 leg with a double to finish, and a match is first to one, two or three legs. You choose the length on the home screen. Lose the first leg and there is still a match to save; win it and Rival has to come back. The throw alternates between legs, as it does in a real match, and when Rival opens a leg he takes a moment first, so you see the board before his first dart lands.
When a match is decided the head to head moves on by one. Over weeks of play that score between the two of you becomes the thing you want to protect, which is a better reason to pick up the darts than any streak counter.
Why not just pick a fixed level?
Many dartbot apps let you choose a fixed bot average, say 45 or 70. That works on the day you choose it. A month later you have improved and the bot has not, or you have a bad week and every leg is a loss. Players start switching levels between legs, and a win stops meaning much because you chose the opponent you knew you could beat.
Rival takes that choice off your hands. He follows your real form, slowly, so the match stays fair without you ever touching a setting.
Why it makes you a better player
Practising alone is easy to skip. A match against someone at your level is not. Because Rival throws like a person at your average, every leg is winnable and losable, which is exactly the pressure that makes your doubles better. In reviews of dartbot apps, players often say their average went up simply because they played more legs that counted.
Rival Darts keeps your stats honestly, too: the darts you miss at a double count, so the checkout percentage you see is the one you really have.