### ----------------------------------------------------
### -- MUGS
### -- Licenses: Artistic-2.0
### -- Authors: Geoffrey Broadwell
### -- File: docs/announce/v0.1.3.md
### ----------------------------------------------------
% 0.1.3 Release


# MUGS 0.1.3 Released!

The [Raku-MUGS org](https://github.com/Raku-MUGS) is proud to present our
third development release on the way to our next major milestone.  This
release includes many accumulated changes since 0.1.2, but the majority of
the milestone work is yet to be done.  :-)


## Packaging

MUGS is available in both source and package form, via these methods:


### `zef`

To simply play with what's already there, use `zef` to install all of `MUGS`
from the `zef/fez` ecosystem.  To prevent failure due to an **unneeded**
transitive dependency that does not exist on all systems, use the following
command:

```
zef install --exclude="pq:ver<5>:from<native>" MUGS
```

**NOTE 1:** If you're having trouble with installing via `zef`, please take
a look at our [installation guide](../howto/install-mugs.md), which has
additional troubleshooting hints.

**NOTE 2:** In this release, MUGS-UI-WebSimple is known to be broken when
installed by `zef`, because it cannot find its HTML templates.  If you would
like to try this UI, please use the Source Repos method below.
**A fix for this has already been merged into the post-0.1.3 tree.**


### Source Repos

The source for all released MUGS repos can be found in the
[Raku-MUGS org on GitHub](https://github.com/Raku-MUGS).  Note that if you
are working on a UI repo, you will probably want to install MUGS with `zef`
as described above to satisfy dependencies, or at least install both
[MUGS-Core](https://github.com/Raku-MUGS/MUGS-Core) and
[MUGS-Games](https://github.com/Raku-MUGS/MUGS-Games).


### Docker

MUGS does not yet have prebuilt Docker packages, but each source repo
includes two `Dockerfile` scripts.  The main `Dockerfile` simply installs
the relevant MUGS libraries, scripts, and resources on top of a
`rakudo-star` official image and creates a default MUGS identity universe.
`Dockerfile.test` builds on that by also installing test identities into
the default universe.


## Primary Improvements

### Switching CLI/TUI to Terminal::LineEditor and Terminal::Widgets

Much of the development effort benefiting MUGS in this release was actually
focused on some new pre-requisites,
[Terminal::LineEditor](https://github.com/japhb/Terminal-LineEditor/) and
[Terminal::Widgets](https://github.com/japhb/Terminal-Widgets).
In turn, Terminal::Widgets made use of the research on terminal emulator
failure modes in
[Terminal::Tests](https://github.com/japhb/Terminal-Tests/).

Terminal::LineEditor provides a pure-Raku replacement for libraries such as
Linenoise and ReadLine, providing all the usual line-oriented input editing
functionality while also properly handling mixed-width Unicode input.

Terminal::Widgets combines the query-capable terminal handling of
Terminal::LineEditor with the lessons learned from several research
projects to extend
[Terminal::Print](https://github.com/ab5tract/Terminal-Print)'s very low
level widgets with live dynamic layout, bubbling event handling, other
significantly expanded functionality, and a pre-built interactive widget
library.

In this release, [MUGS::UI::TUI](https://github.com/Raku-MUGS/MUGS-UI-TUI)
was rewritten to use Terminal::Widgets instead of directly using the
underlying Terminal::Print, and
[MUGS::UI::CLI](https://github.com/Raku-MUGS/MUGS-UI-CLI) was rewritten to
use Terminal::LineEditor instead of its own custom input handling.


## Other Improvements

### Bug Fixes

* Shutdown, not just disconnect, when exiting with errors
* Exit with errors if missing requested game plugins
* Don't crash when a Supplier is disconnected early
* Work around changes to some Rakudo and dependency behaviors
* Fix out of date message stats schemas


### Documentation

* Make sure every MUGS doc subdir has a README and index that links to it
* Add design section for "Fun With Numbers"
* Significantly more work on Create a UI doc, including concrete examples
* Add several design and speculative docs for MUGS in general and
  MUGS::UI::TUI in particular


### Performance

* Stop sending empty WebSocket Continuation frames, thus approximately
  halving the frame rate on the wire
* Serialize via CBOR even for in-memory connections; this reduces in-memory
  performance a bit in exchange for improving consistency, catching more
  serialization bugs, and allowing better separation of serialization and
  network lag
* Support pre-packed Message data, for sending identical game updates to
  many clients efficiently
* Support real-time lag compensation and interpolated game updates to
  better handle low-bandwidth and high- or variable-lag networking


### Security

* Disallow security-related reserved names as identifiers, as these will
  almost always be associated with nefarious behavior
* Improve capabilities and error handling of structure and config validators
* Validation configuration before registering Server Game classes
* Validate server updates on receipt before saving to processing queue


### Testing

* Switch CI tests to test against HEAD of MUGS dependencies


### Tools

* Factor out common parts of local UIs and local tools
* Add a `new-ui-type` command to `mugs-tool`
* Improve tool handling of multiple MUGS repos


## Contributions

This development release is largely the work of Geoffrey Broadwell (`japhb`
on Libera.Chat and [GitHub](https://github.com/japhb)), and includes
improvements to terminal capabilities based on generous contributions of
(sometimes very) confused terminal emulator screenshots from the community
to [Terminal::Tests](https://github.com/japhb/Terminal-Tests/).

If you'd like to contribute to future releases, please take a look at
[our CONTRIBUTING doc](../CONTRIBUTING.md); we'd love to have you!


## Contacting Us

We are on the `#mugs` channel on Libera.Chat IRC; please come and ask
questions or offer suggestions!  Please note that we do not yet have
24-hour round-the-clock coverage, so please stick around and allow some
time for response if you don't get one immediately.

If you are interested in the more general world of game development on Raku,
we are also on the `#raku-gamedev` channel, also on Libera.Chat IRC.


## Future

The next few milestones have been sketched out in our
[release roadmap](../todo/release-roadmap.md).  Future releases are of
course subject to change, but the most likely changes are deferral of iffy
changes or incomplete features that are holding up release of finished work.


## Thank You

THANK YOU to the ever-helpful `#mugs` crew, to everyone who worked on the
many [projects on which MUGS is built](../design/built-with.md), to the
awesome and supportive Raku community, and of course to Larry, Damian,
Jonathan, and all the other Raku designers for creating a language that
brings joy day after day!


