![enter image description here](https://raw.githubusercontent.com/MaSzyna-EU07/maszyna/refs/heads/master/readme_header.png)

# MaSzyna - Railway vehicle simulator


[Website](https://eu07.pl/) · [Report an issue](https://github.com/MaSzyna-EU07/maszyna/issues) · [Community Discord](https://discord.gg/eu07) · [MaSzyna on Steam](https://store.steampowered.com/app/1033030/MaSzyna/) · [MaSzyna on Epic Games Store](https://store.epicgames.com/pl/p/maszyna-79052a)

![Discord](https://img.shields.io/discord/1019306167803056158?style=flat-square&logo=discord&label=Discord&labelColor=white) ![AppVeyor Build](https://img.shields.io/appveyor/build/Hirek193/maszyna?style=flat-square) 

MaSzyna executable source code is licensed under the [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/) and comes with a large pack of free assets under a [custom license](https://eu07.pl/docs/inne/readme_pliki/en-licence.html).


## Table of Contents

-   [Getting Started](#getting-started)
    
    -   [Prerequisites](#prerequisites)
        
    -   [CMake flags](#cmake-flags)
        
    -   [Windows](#windows)
        
    -   [Linux](#linux)
        
-   [Installing](#installing)
    
-   [Known Issues](#known-issues)
    
-   [Support](#support)
    
-   [License](#license)
    


## Getting Started

MaSzyna compiles and runs natively on **Linux** and **Windows**. Other platforms are not tested.

> **Heads-up**  
> Our dev team is small; we keep improving the build process, but issues may still occur. If you get stuck, please ask on the [official Discord server](https://discord.gg/qAh9ctWPQv).

### Prerequisites

> For runtime requirements see [Minimum Requirements](#minimum-requirements).

**1) Software** _(oldest tested in parentheses)_

-   [CMake](https://cmake.org/) _(3.0)_
    
-   [make](https://www.gnu.org/software/make/)
    
-   A C++ compiler with C++14 support (we use some C++17 features, but older compilers may still work):
    
    -   **Windows:** Visual Studio 2022
        
    -   **Linux:** GCC _(12.3.1)_
        

> **Note:** MinGW is currently **not supported**.

**2) Libraries** _(oldest tested in parentheses)_

-   [GLFW 3.x](https://www.glfw.org/) _(3.2.1)_  
    If a link error occurs, pass `-DGLFW3_LIBRARIES="<path>"` to CMake.
    
-   [GLM](https://glm.g-truc.net/) _(0.9.9.0)_
    
-   [libserialport](https://sigrok.org/wiki/Libserialport) _(0.1.1)_
    
-   [libsndfile](https://github.com/erikd/libsndfile) _(1.0.28)_
    
-   [LuaJIT](http://luajit.org/) _(2.0.5)_
    
-   [GLEW](http://glew.sourceforge.net/) _(2.1.0)_
    
-   [libpng](http://www.libpng.org/pub/png/libpng.html) _(1.6.34)_
    
-   [OpenAL](https://www.openal.org/) _(1.18.2)_
    
-   **pthread**
    
-   [Python 3.14](https://www.python.org/) _(64-bit; headers and import library required for embedding)_
    
-   [Asio](https://think-async.com/Asio) _(1.12)_
    

**3) Graphics API**

-   **OpenGL 3.0** or newer
- **DirectX 12** via NVRHI (optional, Windows only, for Better Renderer)


### CMake flags

| Flag | Meaning |
|------|---------|
| `-DCMAKE_BUILD_TYPE=Debug` | Debug build |
| `-DCMAKE_BUILD_TYPE=Release` | Release build |
| `-DCMAKE_BUILD_TYPE=RelWithDebInfo` | Release build with debug symbols |
| `-DWITH_BETTER_RENDERER=ON/OFF` | Enable/disable NVRHI-based renderer |
| `-DPython3_ROOT_DIR=<path>` | Root of the **Python 3.14** install on Windows (`python.exe`, `Lib`, `DLLs`) for embed/copy steps; on Linux, optional if CMake picks the wrong interpreter |

> **Linux note:** `WITH_BETTER_RENDERER` uses DirectX 12 through NVRHI and is **not supported on Linux**.




## Windows

Install **Python 3.14 x64** from [python.org](https://www.python.org/downloads/windows/) and include the optional **Python native development** feature (headers and `.lib` for embedding). Pass `-DPython3_ROOT_DIR="C:\Path\To\Python314"` on the `cmake` line when you want the layout under that directory used for embedding and for copying `Lib` / `DLLs` next to the executable.

**AppVeyor CI** builds with the worker image’s preinstalled Python at `C:/Python314-x64` (see [`appveyor.yml`](./appveyor.yml): `-DPython3_ROOT_DIR=...`).

```powershell
# Clone repository with submodules
git clone --recursive https://github.com/MaSzyna-EU07/maszyna.git

cd maszyna

# Init vcpkg
call setup.bat

# Create directory for CMake build files
mkdir build
cd build

# Generate CMake project (replace %CONFIG% with Debug/Release/RelWithDebInfo)
cmake .. -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE=%CONFIG%

# Build (replace %CONFIG% accordingly)
cmake --build . --config %CONFIG% --parallel

```



## Linux

```bash
# Install dependencies (Fedora/RHEL family)
sudo dnf install -y \
  @development-tools \
  cmake \
  mesa-libGL-devel \
  glew-devel \
  glfw-devel \
  python3.14-devel \
  libpng-devel \
  openal-soft-devel \
  luajit-devel \
  libserialport-devel \
  libsndfile-devel \
  gcc \
  g++ \
  wayland-devel \
  wayland-protocols-devel \
  libxkbcommon-devel

# Clone repository with submodules
git clone --recursive https://github.com/MaSzyna-EU07/maszyna.git

cd maszyna

# Create directory for CMake build files
mkdir build
cd build

# Generate Makefiles (NVRHI is not supported on Linux)
cmake .. -DWITH_BETTER_RENDERER=OFF

# Compile using all cores
make -j"$(nproc)"

```

> **Tip (Ubuntu/Debian)**: Package names differ; install equivalent `build-essential`, `libgl1-mesa-dev`, `libglew-dev`, `libglfw3-dev`, `python3.14-dev`, `libpng-dev`, `libopenal-dev`, `libluajit-5.1-dev`, `libserialport-dev`, `libsndfile1-dev`, and Wayland/X11 dev packages as needed.


## Installing

There is no `make install` yet. Copy the built executable to your MaSzyna installation manually.

-   Output directory: `./bin`
    
-   File name format: `eu07_YYYY-MM-DD_<commit>[_d]`
    
    -   `YYYY-MM-DD` – build date
        
    -   `<commit>` – short commit hash
        
    -   `_d` – present in Debug builds
        

If you already have the MaSzyna assets, copy the executable to the install dir. Assets can be downloaded from [eu07.pl](https://eu07.pl/).

**Rainsted on Linux**

If `Rainsted` (a third‑party starter) fails to detect the executable under Linux, you can create a small wrapper script named `eu07.exe`:

```sh
#!/bin/sh
./eu07 "$1" "$2" "$3" "$4" "$5"

```

If detection still fails, padding the file (with comments) up to ~1 MB may help.


## Known Issues

-   **GLFW linking** – On some systems you must provide the GLFW library path explicitly with `-DGLFW3_LIBRARIES`.
    
-   **X11/Wayland linking order** – Linking order of X11 and related libs can matter.
    
-   **NVRHI on Linux** – The NVRHI/"Better Renderer" path targets DirectX 12 and is currently unsupported on Linux.
    


## Support

-   **Issues:** [https://github.com/MaSzyna-EU07/maszyna/issues](https://github.com/MaSzyna-EU07/maszyna/issues)
    
-   **Official Discord Server:** [https://discord.gg/qAh9ctWPQv](https://discord.gg/qAh9ctWPQv)
    
-   **Project page:** [https://eu07.pl/](https://eu07.pl/)
    
## Minimum requirements

-   OS: **Windows 10 64-bit**
-   Processor:  **2 core at least 2 GHz (e.g. Intel Core i3-2100 / AMD Athlon II X2)**
-   RAM:  **6 GB RAM**
-   Graphics Card:  **supporting OpenGL 3.3 with at least 1GB VRAM**
-   **150 GB of free disk space**
-   Sound card supporting OpenAL with stereo
-   Optional COM ports for custom control panel setups.

## License

-   Source code: [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/)
    
-   Assets: [Custom license](https://eu07.pl/theme/Maszyna/dokumentacja/inne/readme_pliki/en-licence.html)
