### ----------------------------------------------------
### -- MUGS
### -- Licenses: Artistic-2.0
### -- Authors: Geoffrey Broadwell
### -- File: docs/announce/v0.1.0.md
### ----------------------------------------------------
% 0.1.0 Release, "Proof of Concept"


# MUGS 0.1.0 Released!

The [Raku-MUGS org](https://github.com/Raku-MUGS) is proud to present our first
MUGS milestone release: 0.1.0, codenamed "Proof of Concept".  As the codename
indicates, this release is not yet a full prototype -- more of a proof of
concept -- but there is still quite a lot in this first release.


## 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
```


### 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.


## Features

As befits a first milestone, most of 0.1.0 is core infrastructure, basic
documentation, and a few test games.  In particular, you'll find the following:


### Servers

MUGS 0.1.0 includes two network servers, both of which support TLS:

`mugs-ws-server`
  : WebSocket-transport game engine and identity universe server

`mugs-web-simple`
  : HTTP gateway for the [WebSimple UI](https://github.com/Raku-MUGS/MUGS-UI-WebSimple)


### UIs

Two text-based UIs are available in MUGS 0.1.0.  Both have been tested with all
four simple games below, and both have been tested to be *playable* (though not
yet ideal) with the Orca screen reader.  Additional UIs will be added to
support real-time games relatively soon.

`CLI`
  : A simple line-at-a-time turn-based command-line interface

`WebSimple`
  : A low-bandwidth, low-resource, all-text HTML UI


### Games

Four *very simple* games are included, mostly to test the core infrastructure;
expanding this list is a core part of the next major milestone.

`echo`
  : Echoes back messages sent to it

`number-guess`
  : Simple number-guessing game

`snowman`
  : Progressive multi-round letter-guessing game (gets harder by selecting shorter words)

`adventure`
  : The very beginning of an interactive fiction-style adventure game


### Genres

Common functionality for games in the same general genre has been factored out
of the above games.

`Test`
  : Games intended for performance and core functionality testing

`TurnBased`
  : Turn-based games of all types

`Guessing`
  : Simple turn-based guessing games

`IF`
  : Turn-based Interactive Fiction games


### Tools

MUGS 0.1.0 includes three basic utilities for managing MUGS and its source:

`mugs-admin`
  : Manage MUGS identity universes

`mugs-release`
  : Automate several steps for releasing new MUGS versions

`mugs-tool`
  : Create stub files for developing new games and new UIs


### Storage Drivers

A MUGS universe can be stored either in memory or in SQLite databases, using
one of the following drivers:

`Fake`
  : In-memory, transient storage intended mostly for testing

`Red::SQLite`
  : SQLite storage (either in-memory or on-disk) via the
    [Red ORM](https://fco.github.io/Red/)


### Transports

MUGS 0.1.0 has two possible client-server transport mechanisms:

`Supplier`
  : In-memory direct object transfer via paired supplies

`WebSocket`
  : JSON-over-WebSocket network transport


### Identity Types

All currently-planned identity types are supported:

`Account`
  : Container for related users, personas, and characters

`User`
  : Logging in, security, and access control

`Persona`
  : Managing characters and interacting with players outside games

`Character`
  : Joining and playing games


### Doc Sections

Major doc sections:

[Announce](../announce/)
  : Announcements (such as this release announcement)

[Design](../design/)
  : Design docs, sketches, diagrams, and ruminations

[TODOs](../todo/)
  : TODOs broken up by work area

[Other]
  : [README](../../README.md),
    [CONTRIBUTING](../CONTRIBUTING.md),
    [CODE\_OF_CONDUCT](../../CODE_OF_CONDUCT.md),
    [LICENSE](../../LICENSE)


### Utility Modules

Four basic utility modules are included:

`ImplementationRegistry`
  : Roles to support registration and introspection for game and UI classes

`StructureValidator`
  : Simple validation of arbitrary JSON-like structures against an expected schema

`File`
  : Utilities to load and write YAML files, and ensure that they have correct permissions

`Config`
  : Multi-level YAML-based config files, with builtin defaults


### Additional Base Classes and Roles

`MUGS::App::CroServer`
  : Base class for network servers based on [Cro](https://cro.services/)

`MUGS::App::LocalUI`
  : Base class for local (non-web-based) UI apps

`MUGS::Client`
  : Base classes and core functionality for game clients and client sessions

`MUGS::Server`
  : Base classes and core functionality for game servers and server sessions

`MUGS::UI`
  : Base class for game UIs

`MUGS::Authentication`
  : Roles for authentication credentials, with a driver for hashed password support

`MUGS::Connection`
  : Roles for client and server connection drivers

`MUGS::Identity`
  : Identity roles


### Miscellaneous Modules

`MUGS::Core`
  : Global enums, subsets, and other such definitions

`MUGS::Message`
  : Message serialization and validation

`MUGS::Universe`
  : Configuration, validation, and management of identity universes

`MUGS::UI::CLI::Input`
  : Horizontally-scrolling input line editor for CLIs


## Contributions

This first milestone is largely the work of Geoffrey Broadwell (`japhb` on
Libera.Chat and [GitHub](https://github.com/japhb)).

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 allow some time for response if you don't get one
immediately.


## 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 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!


