โ† All news

Forged in Rust

๐Ÿฆ€ ย 24 October 2026 ย ยทย  Duskmere v1.0.54

Lightshire's plaza from the rooftops, the brazier lit and the market stalls open

Everything you have ever done in Duskmere โ€” every wolf, every log, every copper โ€” ran on an engine we wrote in TypeScript, the language of web pages. It carried the game a long way. On 24 October 2026 we switched it off and lit a new one.

In short

Duskmere 1.0.51 to 1.0.54 went live on 24 October 2026. What changed:

  • The Duskmere world server now runs on a new engine written in Rust (version 1.0.51).
  • The Duskmere game in your browser runs on the same Rust engine, delivered as WebAssembly, still with no download (version 1.0.52).
  • In load tests with 64 simulated players, the Rust server used about 148 MB of memory against about 350 MB, and its slowest ticks took about 1.5 ms against 2.2โ€“3.0 ms.
  • The new client prepares all 79 of its shaders before the world appears and none after, so there are no mid-game stutters while it compiles them.
  • Shops gained "Sell many": choose exactly how many of an item to sell, across every slot that holds it.
  • The magpie's timer works again: timed pets and mounts now really run out, even across server restarts.
  • Tree crowns no longer turn black from below, and trees draw again on WebGL 2.

Why we rebuilt Duskmere in Rust

Duskmere is now powered by a custom engine written in Rust, a language built for software that has to be fast and must not fall over. This was not a fix for a slow game. It was a decision about the game we want Duskmere to become: bigger zones, more people in one world, more going on in every scene โ€” without each new idea arriving with the old question attached, how many players will this slow down?

Three things made Rust the answer:

  • One set of rules, in one place. The rules of Duskmere โ€” how much a sword hits for, what a shop pays, how much room your pack has โ€” used to be written twice, once for the server and once for your game, and kept in step by hand. They now live in one Rust library that the server and the game both run. When the rules change, they change everywhere at once.
  • Headroom on the server. Rust has no garbage collector pausing the world to tidy up, and it does the same work with far less memory. That headroom is what lets one world hold more players later.
  • Work on the graphics card, not the processor. The new renderer was built around that rule from day one, and Rust keeps the processor's share of each frame small and predictable.

We did not take the new engine on trust. Before switching, we recorded how the old one behaved โ€” thousands of situations, from a shop sale to a boss fight โ€” and replayed them against the Rust engine until both answered the same way. Both servers still run side by side in our tests, so a rule can't quietly drift between them.

Down Lightshire's main street toward the gate, on the new engine

What got faster

The Duskmere world server is where the move pays off most. In our load test, 64 simulated players played on one PC against each engine in turn:

  • Memory: about 148 MB for the Rust server over a two-hour run, against about 350 MB for the old one โ€” less than half.
  • Tick time: the server's slowest ticks (the 95th percentile) took about 1.5 ms, against 2.2โ€“3.0 ms before โ€” roughly a third to a half less.
  • Responsiveness: the simulated players' 95th-percentile ping fell from 10.4 ms to 6.1 ms.

In the browser, the change you are most likely to feel is what stopped happening. The old engine prepared its shaders โ€” the little programs the graphics card runs โ€” as it met new things, which meant a hitch whenever something appeared for the first time; on our test machine a login could spend around nine seconds waiting on them. The Rust client prepares its whole set up front: 79 of them before you see the world, and none afterwards. Before launch we also cut the client's peak memory on the mainland from 702 to 475 MiB, which matters most on phones.

One honest note: on a fast PC, an ordinary frame costs about what it did before โ€” the old engine had been tuned hard. The new one wins where the old one hurt, and it gives us the room to keep adding without the frame rate paying for it.

The F3 panel naming the engine: client and server both v1.0.54, Rust

Press F3 in game and the build line now names the engine: client v1.0.54 (rust), server v1.0.54 (rust).

Sell many

Every Duskmere shop now asks how many you want to sell. Click an item you hold more than one of while a shop is open and a Sell many window appears, with a slider, a number box and 1 / 10 / 100 / Half / Max buttons. It starts at everything, and it counts every slot holding the same item, tier and enchant, so five bronze swords in five slots are one sale. A shop still takes at most 1,000 of anything at a time. Right-click offers Sell 1 and Sell many; a single item still sells with one click.

Twenty feathers, twenty copper, no regrets

The magpie's clock

Duskmere's magpie, and every other timed pet and mount, runs on a timer that the server keeps. After a server restart, a save could arrive before you had rejoined, find no timers in memory, and quietly strip yours โ€” and a bird with no timer was treated as a bird with all the time in the world. Some of you noticed. The magpie did not volunteer the information.

As of version 1.0.54, the server reads its records before it trusts an empty memory, and every login asks the server for your timers and puts them back on the right pet. A timed pet or mount with no live timer neither flies, fetches nor carries you; it goes back to your pack, where wearing it starts its clock properly.

A magpie at its owner's heel, its clock running again

Trees, from every angle

Duskmere's tree crowns no longer go black when you look up at them from underneath. Leaves now lean their shading toward the sky, the way real leaves are thin enough to let light through, so a crown overhead reads green instead of as a dark silhouette. On browsers running the WebGL 2 fallback or compatibility-mode WebGPU, trees draw again โ€” on those machines they had been missing entirely.

Under the oak by the city wall, with company

Also since our last post

  • Crafting can't overfill your pack any more: the batch size stops at the room you have (1.0.54).
  • If your browser has WebAssembly switched off, the page now tells you why the game can't start instead of hanging (1.0.54).
  • iPhones and HiDPI screens: no more "Rotate your device" lock on iPhone, full resolution on phones, and sharp text on high-DPI desktops (1.0.53). City gates are walkable again, too.
  • Rivers run downstream between wet-mud banks (1.0.39); rain and sea sounds, shoreline waves, and an F key to interact with an on-screen prompt (1.0.38).
  • The mainland uses about 290 MB less memory, and hopping between maps no longer grows it (1.0.42).
  • Every shop buys every item, crafting materials and enchanting cores stack, and monsters drop enchanting cores (1.0.43โ€“1.0.44).
  • Confirm your email for four hours of double XP (1.0.47), a gentler starter island with a better quest guide (1.0.49), atmospheric haze over the distance, and a paid talent reset (1.0.50).

Where this is going

We rebuilt the engine to stop performance from deciding what Duskmere can be. Next, we push it: larger zones, and many more players sharing one world. A Duskmere world holds 64 players today. The Rust server was designed for several times that, and we will load-test it far past that number before we raise the cap. No dates yet โ€” the work starts now.

Frequently asked questions

What is Duskmere written in?
Since 24 October 2026 Duskmere runs on a custom engine written in Rust. The world server switched in version 1.0.51 and the game client in version 1.0.52; the client runs in the browser as WebAssembly. It is not built on Unity or Unreal.
Do I need to download anything to play Duskmere now that it uses Rust?
No. Duskmere is still a free browser MMORPG with no download. The Rust engine is delivered to your browser as WebAssembly, draws with WebGPU, and falls back to WebGL 2 on browsers without WebGPU.
Is the Rust version of Duskmere faster?
On the server side, yes. In load tests with 64 simulated players on the same PC, the Rust server's 95th-percentile tick took about 1.5 ms against 2.2 to 3.0 ms for the old server, and it used about 148 MB of memory over two hours against about 350 MB. In the browser, the biggest change is that the client prepares all of its shaders before the world appears, so it no longer stutters while compiling them mid-game.
Why did Duskmere move from TypeScript to Rust?
To give the game room to grow. One set of game rules now runs on both the server and the client, which keeps them in agreement, and the server has headroom for more players in a world and larger zones without performance becoming the limit.
How do I sell more than one item at a time in Duskmere?
Since version 1.0.54, clicking an item you hold more than one of while a shop is open asks how many to sell, with a slider, a number box and 1, 10, 100, Half and Max buttons. The count includes every slot holding the same item, tier and enchant. Right-clicking offers Sell 1 and Sell many.
Do Duskmere's timed pets and mounts expire?
Yes. Timed pets such as the magpie and timed mounts run on a timer kept by the server. Since version 1.0.54 that timer survives server restarts, every login re-reads it, and a timed pet or mount with no live timer goes back to the pack instead of staying out forever.
Does Duskmere work on browsers without WebGPU or WebAssembly?
Duskmere needs WebAssembly, which every modern browser supports; since version 1.0.54 the page explains the problem if it has been switched off, for example by Microsoft Edge's enhanced security mode. WebGPU is not required: the game falls back to WebGL 2, and since version 1.0.54 trees draw correctly there too.

Got thoughts on this update? Come argue about it with us. The adventurers' guild lives on Discord.

JOIN THE DISCORD