An island at night, and the people keeping its lanterns. This is an early piece of a multiplayer game that grows a little at a time: for now you can walk the island, find its old beacons, lighthouse, jetty and well, gather driftwood, reeds and oil berries, fish for lamp oil at the jetty, give things to people nearby or swap one item for one item, craft wicks and coloured lanterns that light more of the island for everyone near you, fuel the old beacons together, see the other players who are here with you, each carrying a lantern, and greet them with gestures and preset phrases.
You are …. Names are made up by the game; nobody types one.
Each lantern is a room. Pick the same one as a friend to meet them; the link remembers your choice.
Not sure where anyone is? Ask around: your browser joins a shared lobby for a few seconds and players already in a lantern answer with their lantern number, nothing else. It only starts when you press the button, and like joining a lantern it shows your network address to the players there.
Finding other players uses Nostr relays and BitTorrent trackers (both are used at once). Other players can see your network address, as in a video call.
Fishing: cast from the shore or the jetty, then press Reel in when a fish bites. A catch is one lamp oil, which burns as 3 fuel in a beacon and can be given. Fish come and go with the clock, and nothing about them is sent between players.
Music stone: a standing stone by the well that plays eight preset notes. Notes are sounds only (nobody can type or record anything); other players near the stone hear and see yours, and nothing is saved.
The keeper's notes for today (UTC). Everyone in this lantern works on the same three notes; each needs at least 2 players.
Lamplighter rank: earned only by helping other players (relighting a friend's lantern, driving off a shade together, a gift that arrives, lighting a beacon together, finishing a keeper's note together, playing the music stone's tune together, standing beside a player who has no rank yet). It is kept in this browser and shown beside your name and as gold marks on your lantern.
Shades: slow creatures of the night that put out lanterns. They hurt no one and take nothing. Light drives them off, and the more of you stand together with lit lanterns, the faster.
The ruined lighthouse lights for everyone in a lantern while all four old beacons burn at once. It is worked out by each browser from the beacons, nothing extra is sent, and it goes dark again when the lantern empties.
Old beacon: players fuel it together. The fuel you add is used up and counted as your share.
Flame: take a flame from a lit beacon and carry it to an unlit one, or hand it to a player beside you. A flame burns for a few minutes, then goes out. Nothing in your pack is used, and it counts as half the fuel a beacon needs; the rest, and a second player, still have to be added.
Craft: ingredients are used up, never copied.
The lantern you hold lights the ground around you, and everyone nearby sees it. A brighter one reaches further.
Give one item to a nearby player. They have to accept before anything moves.
Trade: swap one of your items for one of theirs with a nearby player. Your item is set aside while you wait, and nothing reaches either pack until both have said yes.
Gestures
Phrases (everyone sees the same words; nobody can type)
The report is numbers only (how many relays opened, how many players were met), copied to your own clipboard and sent nowhere. It holds no names, no addresses and nothing a player sent. If fewer than 2 relays (or trackers) of a way are open 10 s after you enter and nobody is linked yet, the game adds a few spare ones from its own list; the line says so. The spare list, like the first choices, has never been reached from the builders' sandbox: online play over the public relays has not been tested by the builders; only relays on one machine were used.
Move with ←↑→↓ or WASD. On a phone, press anywhere on the map and drag the way you want to walk. T or the Talk button opens gestures and phrases; each has a short cooldown. Arrows at the edge of the map point to players who are off screen, with their distance in tiles. M shows or hides the minimap. Stand next to driftwood, reeds or oil berries and press E (or Gather) to pick them; the plant disappears for everyone in the lantern and grows back after a minute and a half to two and a half. If two of you reach for the same one, only the first gets it. Your pack is saved in this browser. In the Craft panel you can turn items into wicks and amber, jade or azure lanterns; the ingredients are used up, and the lantern you hold lights more of the island, for you and for everyone near you. At an old beacon, a Beacon panel appears: add driftwood (1 fuel) or oil berries (2 fuel) to burn them in the beacon. Twelve fuel lights it, but only when at least two different players have added some, and one player can add at most 16. A lit beacon burns while anyone is in the lantern and lights a wide area for everyone; when the lantern empties, the beacons go dark again, and the fuel you spent stays spent. To swap one item for one item, use the Trade panel: pick what you give and what you want and press Offer trade; your item is set aside, the other player presses Trade, and the two items then go their ways like gifts (an offer nobody answers ends after 20 seconds and your item goes back to your pack). To give something away, stand within a few tiles of another player and press a Give button: they see your offer and must press Accept before one item moves. The Keeper's notes panel lists three small jobs for today (UTC), the same for everyone, made from the island's seed and the date: gather some of one thing, make some wicks or amber lanterns, burn some fuel in one named beacon. What each player does is added to a shared count; a note is finished when the lantern's total reaches the number asked and at least two players have helped, and one player's share is capped at one less than the number, so no single browser can finish a note alone. Progress is not saved: when the lantern empties, or at 00:00 UTC, the counts start again at 0. Press F (or the Fishing panel's button) to cast a line at water in front of you, and again to reel in when a fish bites; a catch is lamp oil, which burns as 3 fuel in a beacon and can be given like anything else. Sound (footsteps and the music stone's notes) is off until you turn it on. The music stone stands a few tiles from the well: stand next to it and a panel offers eight notes; when three different players each play a different note of the stone's tune of the night within one beat, it glows for everyone in the lantern and each of the three earns a help point (the tune comes from the island's seed and the night, so it assumes device clocks agree). The light changes through an eight-hour night that repeats every 48 minutes of the clock (UTC), the same for everyone. The island is alive: the water glints and foams along the shore, trees, grass and reeds sway, fireflies drift round lanterns and lit beacons, and the small sky strip at the top shows the moon crossing from dusk to dawn with stars that fade toward morning. If your device or your settings ask for less motion (prefers-reduced-motion), all of it holds still; a slow device drops the extras by itself.
The game grows a little every two hours. Newest first; open a version to see what it added.
New read the night's tally together when dawn comes. In the last hour of the night a short panel lists how many beacons are burning, whether the lighthouse is lit, how many shades were driven off tonight and how many of the keeper's notes are done today. Every player who was in the lantern when the night began sees the same numbers. A player who came in after the night began sees a tally marked "partial": the shade count says "at least" because they cannot know about shades driven off before they arrived (the beacons and notes they do hear from the others), and a player who has only just come in sees every number marked "at least" for a moment while they hear the others' counts. The music stone's glow is not in the tally, because each browser decides it alone.
Not yet checked online play over the public relays and trackers is still untested by the builders; every check ran on this machine (a fake mesh with the real modules and local pages on the local transport), none over WebRTC. The panel's looks were seen in one screenshot at 375 and one at 1100 px and its frame cost was not measured. A shade driven off in the last moments of a 160-second slot can be missed by a page that hears the last light after the slot changed, so a tally can be one short; a reload or leaving and re-entering makes the tally partial; a player whose device clock differs from the others' gets the night's end at another moment.
New be welcomed, together. If you have no help points yet, a soft gold ring points toward the nearest player who has a rank (on the screen edge when they are out of sight, around their feet when you can see them), and a short note in the rank panel says to go and stand beside them. If you have a rank and stand within 3 tiles of a player who has none yet, and stay there for 4 seconds, you earn a help point for welcoming a newcomer. The newcomer earns nothing from it (their own first points come from helping, like everyone's); each newcomer counts once in a visit, and two welcomes must be 30 seconds apart. The ring pulses gently and stays steady with reduced motion. Nothing is typed or sent: it uses where players stand and the rank number each one already tells the room.
Not yet checked online play over the public relays and trackers is still untested by the builders; every check ran on this machine (a fake clock and three pages on the local transport), none over WebRTC. A rank cannot be checked (a modified browser can claim no rank beside a friend and trade points slowly, one every 30 seconds, once per player seed, with a reload starting the keys again); the page tells a player with no help points where the ranked player is, and a player with rank 0 who still has 1 or 2 help points is treated as a newcomer by the others. The wait counts drawn frames (at most a quarter of a second each), so a page drawing fewer than 4 frames a second, such as a background tab, waits longer than 4 seconds. The ring was checked in the code's own test (shown or not) and not looked at in screenshots.
New see the light of lanterns lie on the water. Your own lantern, every other player's lantern you can see, each lit beacon and the lit lighthouse lay short pale streaks on the water near them; the streaks sway and brighten and dim a little, and they are strongest beside the light and fade out at its edge. At night the moon lays a path of glints on the sea on the side of the screen where it stands in the sky strip, brightest at midnight and gone when it is low at dusk and dawn, dimmer in mist and rain. A streak that would lie right on a player is left out. With reduced motion the streaks stay in place and do not change. On a slow device they are cut down to fewer and then none. Add ?glitter=off to the address to play without them.
Not yet checked how it looks and runs on a real phone (frame cost was measured only in headless Chromium without a graphics card); lit beacons and the lit lighthouse were tried as lights in the code's own checks but never lit in a browser test; the streaks are a modest glint, about 1.3 to 1.5 times as bright as the water beside them in the median, and were looked at only in screenshots at 375 and 1100 px; online play over the public relays and trackers is still untested by the builders (the sandbox cannot reach them), though nothing about this change is sent.
New take a flame from a lit beacon (a new Flame panel appears beside a lit beacon, with a Take a flame button), carry it, and light an unlit beacon with it. The flame counts as half the fuel a beacon needs (6 of 12) and goes into your own share, so the other half still has to be added and a second player still has to add some before the beacon lights. A flame burns for 150 seconds, then goes out. You can hand your flame to a player within 3 tiles: they see an offer and press Take it, and only then does the flame leave you (until they say yes you still carry it; it is never copied). Everyone sees a small orange flame above the lantern of a player who carries one. If you leave or reload, or the player you were handing it to leaves at the wrong moment, the flame simply goes out and nothing is lost: it uses nothing from your pack. After you take a flame, you wait 45 seconds before taking another.
Not yet checked online play over the public relays and trackers is still untested; every flame check ran on this machine (a fake mesh of three players and three pages on the local transport), none over WebRTC. The 45-second wait and the one-flame rule are kept by each page for itself, so a changed client could ignore them; a flame is only half a beacon's fuel and cannot light one without a second player. A flame that is on its way when the giver or receiver leaves goes out instead of being passed on. Taking and lighting with flames gives the same help points as adding fuel does (your share on that beacon grows); nothing else about ranks changed.
New nothing new. This step only made the game's own checks steadier.
New ask "Where are the others?" when many players are online and still get an answer, because pages that find the lobby crowded step out of it for a while and come back later. Players notice nothing else: the hint now counts only the pages that stayed, so with a big crowd its numbers are a sample.
Not yet checked online play over the public Nostr relays and BitTorrent trackers is untested by the builders (the sandbox cannot reach them); the cap was tried only with 14 pages on one machine using the local transport, not over WebRTC. With a big crowd the hint shows fewer players than there are and may not show a full lantern as full. For a few seconds while pages join, or while a returning page looks, a page can be linked to more than the cap.
New see the paths people walk. Every player, you and the others you can see, leaves small footprints on sand and meadow, one foot then the other, and a ring on the water that spreads and fades behind anyone wading through the shallows. Footprints fade away in about 6 seconds and wakes in about 2, so a group's way across the island can be read for a moment, and they show where a lantern lights them. They are drawn by your own browser from where players are, so nothing extra is sent. With reduced motion the footprints stay and the wake rings stop spreading (they only fade). On a slow device the game draws fewer marks, or none.
Not yet checked how the marks look and cost on a real phone (all drawing and timing was measured in headless Chromium with software drawing, and the 375 and 1100 px screenshots show a made-up crowd of marks, not a real group); online play over the public Nostr relays and BitTorrent trackers (the sandbox cannot reach them, and nothing about footprints is sent). Two players can see a trail slightly differently (positions arrive ten times a second and are smoothed, and a tab that is not drawing makes no marks for what it missed). Grass and deep water leave no marks, so most of the island's green leaves none.
New when fewer than 2 relays (or trackers) of a way are open 10 s after entering and nobody is linked yet, the game tries a few spare ones from its own list, and the Connection line says so. The copied report now also says how often a relay opened, failed to open or closed, and whether spares were used.
Not yet checked online play over the public Nostr relays and BitTorrent trackers is untested by the builders (the sandbox cannot reach them), and so is the spare list itself: two of its Nostr spares come from the builder's memory, not a checked list, and none was reached. Spares are held back while a player is linked, so a player who has one working relay and a friend linked gets none while that link lasts (the code rechecks every 5 s).
New read a "Connection" line under the status line while playing: how many Nostr relays and BitTorrent trackers their browser managed to open, how many never opened, and how many players they have met. A "Copy connection report" button puts the same numbers, a little more fully, on their own clipboard as plain text, to paste into a GitHub issue after trying the game with a friend on another network. The report holds only counts and fixed words: no names, no addresses and nothing another player sent. It says plainly that online play over the public relays has not been tested by the builders. If the browser will not allow copying, the text appears in a box, already selected, to copy by hand.
Not yet checked online play over the public Nostr relays and BitTorrent trackers is still untested by the builders (only relays and a tracker on one machine were used); the report has never been read after a real online game, and its count of relays that opened and then closed is sampled once a second, so a relay that opens and closes within a second is counted as never opened. The report does not count WebRTC connections that failed to open: it counts connections rebuilt after going silent, and players who joined and went.
New read here what comes next; nothing in the game itself changed this time (this step plans the next ten). Coming next: a connection report you can copy (numbers only) after playing online, spare relays for when some are down, footprints and wakes, a lobby that stays small when many play, then carrying a beacon's flame to another beacon, light on the water, a welcome for newcomers, a tally of the night at dawn and cloaks for the figures.
Not yet checked online play over the public Nostr relays and BitTorrent trackers is still untested by the builders (the build sandbox's proxy refused relay.damus.io, nos.lol, tracker.webtorrent.dev and tracker.openwebtorrent.com again, HTTP 403); only the owner's test on an early version covers the real network.
New feel the weather in play, not only see it. In mist (and in rain, which brings mist) the names of other players who are more than 6 tiles away fade out, so across the island you see a lantern and a figure but not a name; they are still on the minimap, and names come back as you walk closer. When it rains, the shades of that stretch of night move a fifth slower, so they take longer to arrive and to leave. Both numbers (6 tiles, a fifth slower) are written on the page in the shades panel. Everyone gets the same weather from the island and the clock (if device clocks agree), and nothing is sent.
Not yet checked online play over the public Nostr relays and BitTorrent trackers (nothing about this is sent, so only a relay on this machine was used for the other tests), how the fading names read on a real phone, and whether players whose device clocks differ see the same pace for a shade (the same caveat as the shades). Known limit: a shade's pace is set once for its 160-second stretch of night, by the weather when that stretch begins; if it starts to rain halfway through, that stretch's shades keep their usual pace until the next one. A slowed shade also fades out a few seconds earlier than a normal one so that it never outstays its stretch.
New see the two ends of the night in the colour of the sky. At dusk (around the first hour of the night, "Dusk") the whole island takes a cool blue; at dawn (around the last hour, "Dawn") it takes a soft grey, and shadows of trees, rocks and landmarks stretch longer, longest at dawn. Every lantern lays a warm pool of light on the ground at those hours so you can still see where your light ends, and the small sky strip at the top glows low over the sea with a thin line of horizon. With "reduce motion" switched on in your device the horizon line stays still. Everyone sees the same colours at the same moment, because it follows the shared night clock.
Not yet checked online play over the public Nostr relays and BitTorrent trackers (nothing about dawn and dusk is sent, so only a relay on this machine was used for the other tests), how the colours look on a real phone screen in daylight, and frame rates on a real phone (measured only in headless Chromium without a GPU). Known limit: at dusk and dawn your own figure stands out less from the ground (3.8 to 1 against 9.0 at midnight), and the path in your light is a little fainter at dawn (1.43 to 1 against 1.53).
New swap one item for one item with a player standing within three tiles. A new Trade panel sits under the Give buttons: pick what you give and what you want (any of the eight things in the pack, wicks and lanterns too) and press Offer trade. Your item is set aside at once and shown in your pack line as "set aside for a trade". The other player sees "X offers you one driftwood for one of your reeds" and presses Trade or No thanks. Only if they accept does anything leave their pack, and the two halves then travel the way gifts do: each goes on its way and each side is told when the other half arrived. You can withdraw an offer, and an offer nobody answers ends after 20 seconds; in all of those your item goes back to your pack. A trade ends with nothing moved if the other player has none of what you asked for, already holds 999 of what you offer, or has a full waiting list when they answer. Both of you can only have one trade or gift offer open at a time. If you close the page in the middle of an offer, the item is back in your pack when you return. Each half that arrives earns the sender a help point, like a gift (at most one every 4 seconds).
Not yet checked online play over the public Nostr relays and BitTorrent trackers (only a relay on this machine was used), how the panel and its two drop-down lists look and work on a real phone and with a screen reader, and trades between two tabs of one real browser sharing a saved pack. Known limit: if you accept a trade and the other player then leaves for good, your accepted item stays set aside until they come back, and a modified game that accepts and never goes on can keep up to 4 of your items set aside this way.
New find a music stone a few tiles from the well. Stand next to it and a panel offers eight notes (low C, D, E, G, A, high C, high D, high E); press one and the stone shows a ring of that note's colour for everyone in the lantern, and it sounds for every player who has turned Sound on. Sound is off until you press the button, which used to say "Footsteps" and now says "Sound" because it switches footsteps and the stone's notes together. Each night the stone has a tune of three different notes, named in the panel: when three different players each play a different one of those notes within one and a half seconds, the stone glows for 20 seconds for everyone in the lantern and each of the three earns a help point toward the lamplighter rank. A note is only a sound, nothing can be typed or recorded, and nothing about the stone is saved. A note counts only from a player standing near the stone, and each player can play at most about two notes a second.
Not yet checked online play over the public Nostr relays and BitTorrent trackers (only a relay on this machine was used), what the notes sound like (no sound was ever heard here, the tests only count notes that were asked to play, and the sound code has never been run in a real browser with sound output), how the stone and its glow look and how the panel works on a real phone (only headless screenshots at 375 and 1100 px were looked at), and the tune assumes players' device clocks are in the same 48-minute night (the same caveat as the shades and the weather).
New press "Where are the others? (a guess)" on the landing screen. For 20 seconds your game asks around, and players already inside a lantern answer with the number of their lantern, nothing else. You then read how many players answered in each lantern, are told which lantern looks busiest (a full lantern of 12 is skipped) and can press "Pick Lantern N" to select it. The words call it a guess every time: it counts only the players whose games answered just now, and "nobody answered" does not mean nobody is playing. Nothing is asked until you press the button.
Not yet checked online play over the public Nostr relays and BitTorrent trackers (only a relay on this machine was used), how the hint reads and behaves on a real phone, and how a busy lobby behaves with many players online at once (see Network).
New see the island's trees, rocks, well, beacons and ruined lighthouse throw soft shadows away from the light near them: your own lantern, other players' lanterns, a lit beacon and the lit lighthouse. Walk round a tree and its shadow swings round with you; when a friend's lantern comes near a tree on your screen, the tree's shadow moves away from them too. A lit beacon now throws the shadows of the trees round it, and its flames, the glow it gives and the lighthouse lamp flicker (a lit beacon also shows a second, thinner tongue of flame).
Not yet checked online play over the public Nostr relays and BitTorrent trackers (the sandbox's proxy refuses them, so only a relay and a tracker on the same machine were used; nothing about shadows is sent, so shadows themselves use no connection), how the shadows and flicker look and run on a real phone (the frame cost below is from headless Chromium with software drawing, not a phone), and whether the soft shadows stay easy to read on a very bright or very dim screen.
New fish. Stand on the jetty or any shore, face the water and press F (or the Cast line button in the new Fishing panel) to cast a float up to 4 tiles out, then press F again (Reel in) when a fish bites. Fish come and go round the end of the jetty with the clock: dark shapes with a ring on the water, seen where a lantern lights it; they drift, appear and vanish through each 24 seconds. A bite starts when a fish is beside your float, the float shows bright rings and the panel says so, and you have 2 seconds to press; pressing too early only brings the line in, and a bite you miss gets away. A catch is one lamp oil, a new item in your pack (saved in your browser): it burns as 3 fuel in a beacon (a new Add lamp oil button), counts toward the keeper's burn-fuel notes (by the code; no test checks that), and can be given like anything else (a new Give lamp oil button). If you already hold 999 lamp oil, the fish is let go and nothing is added. Two players who both have a line out with floats at most 4 tiles apart draw a shoal in for both of them: three silver fish circle between the two floats, a soft shimmer shows on the water, and fish of the shoal bite from farther, even at a shore where no fish live. A shoal ends when either of you reels in or leaves, or if a player goes quiet for 12 seconds. Other players' lines and floats are drawn too. Two players can both catch from the same fish, because nothing about fish is shared. Everyone sees the same fish in the same places only if their device clocks agree (the clock note from milestone 17 still applies).
Not yet checked online play over the public Nostr relays and BitTorrent trackers (the sandbox's proxy refuses them, so only a relay and a tracker on the same machine were used; fishing itself was run over WebRTC against the local relay only), how the fish and floats look and play on a real phone (screenshots at 375 and 1100 px were taken only in headless Chromium; fish are small and only show where a lantern lights the water), whether 2 seconds, 4 tiles and about 6 fish at a time feel right in real play, and what players whose clocks differ by minutes see (fish would be in different places for them, so a shoal would still form for both but natural fish would not match).
New meet everyone in a lantern whichever way they found it. The game now looks for other players through the Nostr relays and the BitTorrent trackers at the same time (before, it tried Nostr and gave up on it after a few seconds), and a player who is reachable both ways is shown once, not twice, and gifts and shares from them are counted once (seen in local tests only). The page says which of the two ways are open ("Nostr relays and BitTorrent trackers (both connected)", or one of them with the reason the other is not). One limit remains: a player who is on Nostr only and a player who is on BitTorrent only still do not see each other, because nothing is passed on between them; both see every player who is on both.
Not yet checked online play over the public Nostr relays and BitTorrent trackers (the sandbox's proxy refuses them, so only a relay and a tracker on the same machine were used), how often real players end up on one path only, how the extra connections cost on a real phone, and how long the BitTorrent side takes to link on a public tracker (about 15 to 25 s on the local one).
New see when their device clock and another player's disagree. The shades, the weather, the night's hour and the keeper's notes are all worked out by each player's own device from its clock, so two players whose clocks are minutes apart see shades in different places and, around midnight UTC, different notes. Now your game tells the others in the lantern what your clock says, and if someone's clock differs from yours by 10 seconds or more, a short note under the player count names the one who differs most, says by about how much and whose clock is behind, and suggests setting the device to network time. It changes no rule and cannot fix anyone's clock; it only says so. The note goes when that player leaves.
Not yet checked online play over the public Nostr relays and BitTorrent trackers (only a relay on the same machine was used), how the note reads on a real phone and with a screen reader, and how often real players' clocks differ by 10 seconds or more.
Fixed two tests that failed now and then because of their own timing (nothing players see changes).
Not yet checked online play over the public Nostr relays and BitTorrent trackers (the sandbox's proxy refused relay.damus.io, nos.lol and tracker.webtorrent.dev again this run, HTTP 403 on CONNECT).
New see people walk. Every figure now has two feet that step in turn, a pale head that leans a little as it walks, and a lantern on a swinging arm, so a walking player is easy to tell from a standing one at a glance. Bowing leans the head forward, waving raises a hand (as before); cheering lifts the head, and sitting puts the feet out in front. Everyone sees the others' figures this way without anything extra being sent. If your device asks for reduced motion, figures do not step or swing (gesture poses still apply).
Not yet checked online play over the public Nostr relays and BitTorrent trackers (only the local relay was used), and how the figures look and perform on a real phone (screenshots at 375 and 1100 px were taken only in headless Chromium; the figures are small and the feet are mostly visible while walking).
New light the ruined lighthouse together. When all four old beacons in a lantern burn at the same time, the lighthouse lights for everyone in that lantern: a wide pool of light clears the night around it, two long beams turn slowly (still, with reduced motion), a bright lamp shines at the top of the tower, it shows lit on the minimap, and a new line in the panel says how many beacons are lit (for example "3 of 4") and then that the long watch is kept. It stays lit while anyone is in the lantern and goes dark when the lantern empties, like the beacons. Shades keep out of its beam: one that was making for the lighthouse fades away as the light grows, one passing through is held at the edge of the light, and nobody standing inside the beam can be snuffed. The beam grows over a couple of seconds; with reduced motion it is there at once. Everyone sees the same shade places only if their device clocks agree.
Not yet checked online play over the public Nostr relays and BitTorrent trackers (only relays and trackers running on the same machine were used), how the beams and the lamp look and perform on a real phone, whether 14 tiles of light and a safe zone of 90% of it are the right size for real play, and what players whose clocks differ by minutes see (shades would stand in different places for them, so the edge of the beam would not match); also, the first frames after Footsteps is turned on stalled about 0.9 s in headless Chromium while the sound is set up, and whether players feel this on slow devices was not checked.
New get into the game on networks that block the Nostr relays. If no relay can be reached within a few seconds, the game tries public BitTorrent trackers instead, and the page says which way it connected ("Nostr relays (connected)" or "BitTorrent trackers (connected; the Nostr relays could not be reached)"), or that neither could be reached. You only meet players who connected the same way: a player on Nostr and a player on BitTorrent do not see each other.
Not yet checked both public ways in real life (the build sandbox could not reach any public relay or tracker, so the fallback was tried only against a relay and a tracker running on the same machine), whether a slow relay (over 7 seconds to open) makes the game switch although it would have worked, and how often players end up on different paths.
New give wicks and amber, jade and azure lanterns to a nearby player, the same way as gathered items: you offer, they accept, then it moves. New Give buttons sit next to the old ones. Nothing leaves your pack until the other player accepts, a player with 999 of that thing refuses it, and an offer nobody answers ends after 20 seconds with nothing moved. If you give away the last lantern of the one you are holding, you hold the plain lantern again. A lantern you receive is not held automatically; press its Hold button.
Not yet checked online play over the public Nostr relays (only the local relay was used), and how the new buttons feel on a real phone.
New see mist and rain drift over the island. The weather changes every few minutes, easing from one to the next over about 40 seconds: roughly half the time it is clear, otherwise misty or rainy, and everyone in the same lantern sees the same sky if their device clocks agree. Mist is a thin pale veil with a few soft banks that drift across; rain is a cool tint and fine slanting streaks. Lanterns, paths and players stay easy to see in both. The small sky strip at the top clouds over in mist and rain (stars fade, the moon dims), and when a wave of shades is out it darkens under a violet-black cloud and its frame turns pale violet, so you can tell a wave is coming or going before you see a shade. With reduced motion on, nothing falls or drifts: the grey tint and still mist stay. On a slow phone the game draws fewer drops and banks, then only a flat thin veil. It is only a look: weather changes no rule.
Not yet checked online play over the public Nostr relays (the sandbox cannot reach them; only the local relay was used), how the weather and the darker sky look and perform on a real phone (frame costs were seen only in headless Chromium without a GPU), and whether the mist hides too much on a bright screen outdoors.
New earn a lamplighter rank by helping other players. Five kinds of help give one point each: relighting a friend's snuffed lantern early by standing beside them, driving off a shade together, a gift of yours that arrives, lighting a beacon together, and finishing a keeper's note together (only when you added to it yourself; walking back into a beacon that is already lit earns nothing). Three points make you a Lamplighter, then 10, 25 and 60 points bring Beacon keeper, Warden of the watch and Long watcher. Your rank shows as a small gold title over your name, as gold marks on your lantern (one per rank) and beside your name in the player list, for everyone in the lantern, and a new panel tells you your points and what the last point was for. Receiving a gift earns nothing; giving does, at most one point every 4 seconds, and a relight at most one every 10 seconds. Your points are saved in your own browser. The rank is decoration only and gives no advantage; a modified game could claim any rank, so a title proves nothing.
Not yet checked online play over the public Nostr relays (the sandbox cannot reach them; only the local relay was used), how the gold title and marks look and the panel reads on a real phone and with a screen reader, whether the steps (3, 10, 25, 60 points) feel right in real play, and whether points are easy to farm with a second browser (nothing stops that; the page says the rank proves nothing).
Fixed a test that failed now and then (nothing players see changes). The shades test that failed now and then was checked against the real paths of the shades, and the game's rules were not at fault; the test now starts on a quiet stretch of the shades' clock.
Not yet checked online play over the public Nostr relays (the sandbox proxy refused a connection to relay.damus.io this run with 403; only the local relay was used).
Not yet checked the tester then ran beacon.test.mjs 3 times: 0 of 3 passed, each failing the WebRTC check that two pages find each other again after one was deaf for 12 s (local and node parts passed), so reconnecting after a dropped link may not work; cause not found, and the earlier "5 of 5" beacon result was not reproduced. give, craft, living, quests and shades passed 3 of 3 and the page check passed.
New meet the shades: slow, hooded creatures of the night that drift in off the sea, circle one of the island's landmarks for about a minute and drift away again. They hurt no one and take nothing. A shade that reaches you puts your lantern out for 14 seconds: your light shrinks to a dull ember with a curl of smoke, and everyone sees it. Light drives shades off, and the more of you stand together the better. Every second your lit lantern reaches a shade you add one light-second to it; when a shade has 20 light-seconds from at least 2 different players it is driven off in a burst of motes and gone for the rest of that wave (one player alone can add at most 19, so a shade always takes two). While another player's lit lantern is on a shade, it cannot snuff you: it is held back, so a friend whose light reaches the shade keeps your light safe. If your lantern is out, a player with a lit lantern who comes within two and a half tiles relights it after a second and a half, and then no shade can snuff you again for 6 seconds. Inside the light of a lit beacon a shade cannot snuff anyone. A new Shades panel says how many shades are out, how far and which way the nearest one is, and how much light it has; a small violet mark on the minimap shows each one; waves of 0 to 4 shades arrive every few minutes, the same for everyone in the lantern. Shades are drawn as cold hooded mist with two pale eyes and a ragged hem that sways; they thin, shrink and bend away from your light and throw off sparks where it burns them, and a ring at their feet fills as the light-seconds come in. With reduced motion they hold their pose (they still drift slowly along their path, since that is where the game says they are).
Not yet checked online play over the public Nostr relays (the sandbox cannot reach them; only the local relay was used), how the shades look and the panel reads on a real phone and with a screen reader, whether 14 seconds snuffed and 20 light-seconds are the right numbers for real play, whether the waves are too rare or too frequent, a lantern whose players' clocks differ by minutes (they would see shades in different places and count light on different ones), and a shade's look in direct comparison with real devices' colour (checked only in headless Chromium screenshots).
New read three small notes from the keeper each day, in a new "Keeper's notes" panel, and finish them together with everyone in the same lantern. Every day (UTC) the island's seed and the date make the same three notes for everyone: gather some of one thing (for example "Gather 8 driftwood together"), make some wicks or amber lanterns, and burn some fuel in one named old beacon (for example "Burn 7 fuel together in the south-west beacon"). Whatever you gather, make or burn for a note is added to a shared count that everyone in the lantern sees at once, with how many players have helped. A note is finished when the count reaches the number asked and at least two players have helped; one player can add at most one less than the number, so no single browser can finish a note alone. Players who join later are told where the notes stand. The notes start again at 0 when the lantern empties and at 00:00 UTC; progress is not saved anywhere, and your pack is untouched beyond what the job itself uses.
Not yet checked online play over the public Nostr relays (the sandbox cannot reach them; only the local relay was used), how the panel looks and reads on a real phone and with a screen reader, a lantern whose players' clocks differ by minutes (the day would differ for them and they would not share notes), and whether three notes a day are the right amount.
Fixed the transport link watchdog and the ?mute= test hook were dropped by accident in commit 2fc04d5 and are restored from c4e5c53; the Trystero offer-renewal fix from 2fc04d5 is kept. The beacon test passed 5 of 5 runs on a local relay. Online play over the public relays was not tested. Players see no change.
New see the island move. The water glints and the shallows foam against the shore, washing in and out; tree crowns, grass blades and reeds sway in the wind; fireflies drift round every lantern (more, in the lantern's colour, round amber, jade and azure ones, and a ring of them round a lit beacon), so you can see at a glance who is carrying what. A small sky strip at the top of the map shows the moon crossing from dusk to dawn and the stars coming out toward midnight and fading before morning. The edges of coloured lanterns' light are softer and melt into the dark. If your device asks for reduced motion, all of it holds still (the same picture, not moving); and a slow device lowers the extras by itself. Add ?look=plain to the address for the old look.
Not yet checked how it looks and runs on a real phone (frame rates above are from headless Chromium on software rendering), whether the sky strip crowds the top of a small screen with the arrows and the minimap, online play over the public Nostr relays (the sandbox cannot reach them; only the local relay was used), and reduced motion on a real device (checked with the browser's emulated setting). At the time of writing the beacon test failed at one existing step; fixed in the 2026-10-16 "link watchdog restored" entry.
New fuel the island's four old beacons together. Stand within 2.5 tiles of a beacon and a Beacon panel appears: add driftwood (1 fuel) or oil berries (2 fuel) and it is burned (used up and gone from your pack). Each player's share is counted, and everyone sees the beacon's fuel (a label on the beacon, an ember glow that grows with the fuel, and a mark on the minimap). A beacon lights at 12 fuel, but only when at least two different players have added some: one player alone can put in up to 16 and it still stays dark until someone else adds even 1. A lit beacon burns with a flame and lights a wide area (9 tiles) for everyone who can see it, and takes no more fuel. If two of you add at the same moment nothing is lost; late joiners are told what is already in; if you leave and come back your share is remembered and you cannot go past your 16. A lit beacon stays lit while anyone is in the lantern; when the last player leaves the lantern, the beacons go dark again (nothing is kept on a server), and fuel you spent stays spent.
Not yet checked beacons over the public Nostr relays and across real home and mobile networks (the sandbox's proxy refuses them; only the local relay was used), how the panel, flame and light look on a real phone, screen readers. A modified client can claim shares it did not add, or another player's seed (so "two players" can be faked); there is nothing to win from others. The link watchdog fixed the half-open link seen in the stress run; whether it removes every "never met" failure is not proven (180 clean meshes), and one give failure ("when both are back, the reeds arrive", both pages had lost each other) has no captured cause.
New turn what they gathered into a wick and into amber, jade and azure lanterns. A new Craft panel lists the costs (a wick takes 2 reeds and 1 oil berry; the lanterns take wicks plus driftwood, reeds and oil berries, more for the brighter ones). Making something uses up its ingredients and gives you the one new thing; it never makes extra. If you are missing anything, or the stack you would add to is full (999), nothing is made and nothing is used. The lantern you hold decides how far your light reaches (the plain one as before, amber 1.4 times as far, jade 1.8, azure 2.3) and it glows in its own colour. Everyone standing near you sees that wider pool of light on the ground around you, and sees your lantern's colour in your hand, including players who join later. A lantern brighter than the one you hold is picked up as soon as you make it; the Hold buttons switch between the ones you own, and the plain lantern, which stays in your pack. Wicks and lanterns are saved in your own browser with the rest of your pack. They cannot be given to other players yet.
Not yet checked crafting and lantern light over the public Nostr relays and across real home and mobile networks (the sandbox's proxy refuses them; only the local relay was used), how the glow looks and feels on a real phone and whether it still reads well in bright daylight screens, screen readers. A modified client can claim a lantern it never made; that only changes how it looks to others.
New keep what they gather. Your pack of driftwood, reeds and oil berries is saved in your own browser, so it is still there when you come back, and it is saved the moment it changes. Stand within three tiles of another player and press Give driftwood, Give reeds or Give oil berries: they see your offer and one item moves only if they press Accept. They can say No thanks, you can take the offer back, and an offer nobody answers ends after 20 seconds; in all of those the item stays in your pack. If either of you leaves or closes the page halfway, the item is never copied: if it had already left your pack it shows as "on its way" and arrives, once, the next time the two of you are in the same lantern (if your browser blocks or clears its saved data, that record is lost). A player who already holds 999 of a kind politely declines more.
Not yet checked giving over the public Nostr relays and across real home and mobile networks (the sandbox's proxy refuses them; only the local relay was used), how the new buttons look and feel on a real phone, screen readers, and two tabs of one real browser sharing a saved pack. A modified client can still invent items for itself (nothing to win from others). Also limited: if storage is blocked or cleared after the hand-over, the record of a gift on its way is lost; a peer can claim another player's public seed, so a gift meant for one player could be taken by someone using the same seed; a receiver with 32 gifts still expected declines new offers; only the newest 1000 received-gift records are kept.
New gather driftwood on the shore, reeds at the water's edge and oil berries near the woods. The island holds 42 spots, 14 of each. Stand next to one (a ring and its name appear) and press E or the Gather button to pick it. The plant disappears for everyone in your lantern and grows back after one and a half to two and a half minutes. If two of you reach for the same one at the same moment, only one of you gets it and the other is told someone was first. If you arrive late, you see the spots that are already picked as empty. Your pack (driftwood, reeds, oil berries) is shown under the map; for now it is only kept while you stay on the page, and nobody else sees it.
Not yet checked gathering over the public Nostr relays and across real home and mobile networks (the sandbox's proxy refuses them; only the local relay was used), how the new plants look and feel on a real phone, screen readers. A modified client that is the arbiter could hand itself everything; accepted for now (nothing to win).
New find seven landmarks on the island: four old beacons on the headlands (one in each quarter), a ruined lighthouse, a jetty out over the shallows and a well not far from where everyone arrives. Their names show when you get close, and the beacons, lighthouse and well are solid, so you walk around them. A minimap in the corner shows the whole island, the landmarks and every player in their lantern colour (button or M to hide it). A line under the map names the hour and the nearest landmark with its distance and direction. The night now has eight hours (Dusk, First watch, Deep night, Midnight, Small hours, Late watch, Grey before dawn, Dawn); the light gets darker toward midnight and your lantern reaches further when it is darkest. A night lasts 48 minutes of the clock (UTC) and then repeats, the same for everyone. Footsteps are available but off until you press Footsteps; when on, you hear your own steps (sand, grass, stone, shallow water and the jetty's planks all sound different) and, more quietly, players walking within about 8 tiles.
Fixed the little walking bob of avatars (and the jump, wave and pointing movements of gestures) now stops when your device asks for reduced motion. Incoming messages that are too large are now ignored.
Not yet checked online play of this milestone in particular (the sandbox's proxy refuses the public relays; the owner's separate test, noted below, covered basic play on the earlier version); the sound of the footsteps (Claude cannot hear them, and no audio output was checked, only that steps are scheduled); how the landmarks, light and minimap look on a real phone and in bright daylight; screen readers; the jetty is only two planks long on this island; the message cap does not stop decoding of a huge message.
New open Talk (button or T) and send one of 5 gestures (wave, bow, point, cheer, sit) or one of 16 preset phrases ("Over here!", "Follow me", "Thank you", "Need light", "Goodnight", and 11 more). Others see a bubble over the avatar with a thin bar that runs down as it fades (4.5 s), or the gesture drawn on the avatar; the words also appear in a screen-reader line. Phrases cool down for 3 s and gestures for 1.5 s (buttons show it); sitting ends when you walk. Players who are off screen get an arrow at the edge of the map in their lantern colour with their distance in tiles.
Fixed index.html had no Content-Security-Policy (the design requires one); it now has one (scripts from 'self' and the import map's hash, no eval, object-src 'none', connections only to wss: and local test relays).
Not yet checked online play over the public Nostr relays or BitTorrent trackers (the sandbox's proxy refuses them) and across real home and mobile networks, so this is still marked "not yet verified" on the page; how the gestures and bubbles look and feel on a real phone; screen readers. Also open: incoming messages have no byte-size cap (fields are counted and validated, but a very large payload is still parsed first); the CSP is not confirmed free of violations in a real browser (headless Chromium logged none); the talk test failed one check once and passed on two reruns, cause not found.
New get a generated name ("Grey Heron 41") saved in their browser, pick one of six lantern rooms, walk a 128 x 128 seeded night island (keys or press-and-drag on phones) with water, sand, meadow, woods and rocks, and see every other player in the same lantern move with their name and lantern colour. Leaving (or closing the tab, or 12 s of silence) removes a player for the others. A status line says how many others are here, or whether the signalling relays could be reached.
Not yet checked online play over the public Nostr relays or BitTorrent trackers (the sandbox's proxy refuses them), WebRTC across real home and mobile networks (no TURN server, so some network pairs will fail), and how it feels on a real phone.