2019-07-06 13:04:05 +08:00
← [README ](../README.md )
2017-10-08 11:16:25 +08:00
This file provides more technical documentation about SMAPI. If you only want to use or create
mods, this section isn't relevant to you; see the main README to use or create mods.
2019-07-06 13:04:05 +08:00
This document is about SMAPI itself; see also [mod build package ](mod-package.md ) and
[web services ](web.md ).
2019-07-06 12:35:51 +08:00
2017-10-30 02:14:03 +08:00
# Contents
2019-07-06 12:35:51 +08:00
* [Customisation ](#customisation )
* [Configuration file ](#configuration-file )
* [Command-line arguments ](#command-line-arguments )
* [Compile flags ](#compile-flags )
2021-12-06 07:55:10 +08:00
* [Compile from source code ](#compile-from-source-code )
* [Main project ](#main-project )
* [Custom Harmony build ](#custom-harmony-build )
* [Prepare a release ](#prepare-a-release )
* [On any platform ](#on-any-platform )
* [On Windows ](#on-windows )
2019-07-06 12:35:51 +08:00
* [Release notes ](#release-notes )
## Customisation
### Configuration file
2020-01-26 07:22:50 +08:00
You can customise some SMAPI behaviour by editing the `smapi-internal/config.json` file in your
game folder. See documentation in the file for more info.
2019-07-06 12:35:51 +08:00
### Command-line arguments
The SMAPI installer recognises three command-line arguments:
argument | purpose
-------- | -------
`--install` | Preselects the install action, skipping the prompt asking what the user wants to do.
`--uninstall` | Preselects the uninstall action, skipping the prompt asking what the user wants to do.
`--game-path "path"` | Specifies the full path to the folder containing the Stardew Valley executable, skipping automatic detection and any prompt to choose a path. If the path is not valid, the installer displays an error.
2019-11-04 07:24:34 +08:00
SMAPI itself recognises two arguments **on Windows only** , but these are intended for internal use
2021-04-04 23:37:11 +08:00
or testing and may change without warning. On Linux/macOS, see _environment variables_ below.
2019-07-06 12:35:51 +08:00
argument | purpose
-------- | -------
2022-03-07 08:55:32 +08:00
`--no-terminal` | The SMAPI launcher won't try to open a terminal window, and SMAPI won't log anything to the console. (Messages will still be written to the log file.)
`--use-current-shell` | The SMAPI launcher won't try to open a terminal window, but SMAPI will still log to the console. (Messages will still be written to the log file.)
2019-07-06 12:35:51 +08:00
`--mods-path` | The path to search for mods, if not the standard `Mods` folder. This can be a path relative to the game folder (like `--mods-path "Mods (test)"` ) or an absolute path.
2019-11-04 07:24:34 +08:00
### Environment variables
2022-03-07 08:55:32 +08:00
The above SMAPI arguments may not work on Linux/macOS due to the way the game launcher works. You
can set temporary environment variables instead. For example:
2019-11-04 07:24:34 +08:00
> SMAPI_MODS_PATH="Mods (multiplayer)" /path/to/StardewValley
environment variable | purpose
-------------------- | -------
`SMAPI_MODS_PATH` | Equivalent to `--mods-path` above.
2022-03-07 08:55:32 +08:00
`SMAPI_NO_TERMINAL` | Equivalent to `--no-terminal` above.
`SMAPI_USE_CURRENT_SHELL` | Equivalent to `--use-current-shell` above.
2019-11-04 07:24:34 +08:00
2019-07-06 12:35:51 +08:00
### Compile flags
SMAPI uses a small number of conditional compilation constants, which you can set by editing the
2019-08-10 05:47:53 +08:00
`<DefineConstants>` element in `SMAPI.csproj` . Supported constants:
2019-07-06 12:35:51 +08:00
flag | purpose
---- | -------
2021-04-04 23:37:11 +08:00
`SMAPI_FOR_WINDOWS` | Whether SMAPI is being compiled for Windows; if not set, the code assumes Linux/macOS. Set automatically in `common.targets` .
2019-07-06 12:35:51 +08:00
2021-12-06 07:55:10 +08:00
## Compile from source code
### Main project
2020-06-14 23:29:07 +08:00
Using an official SMAPI release is recommended for most users, but you can compile from source
2021-12-06 07:55:10 +08:00
directly if needed. Just open the project in an IDE like [Visual
Studio](https://visualstudio.microsoft.com/vs/community/) or [Rider ](https://www.jetbrains.com/rider/ ),
and build the `SMAPI` project. The project will automatically adjust the build settings for your
current OS and Stardew Valley install path.
2017-10-08 11:16:25 +08:00
Rebuilding the solution in debug mode will copy the SMAPI files into your game folder. Starting
2021-12-06 07:55:10 +08:00
the `SMAPI` project with debugging from Visual Studio or Rider should launch SMAPI with the
debugger attached, so you can intercept errors and step through the code being executed.
2017-10-08 11:16:25 +08:00
2021-12-06 07:55:10 +08:00
### Custom Harmony build
SMAPI uses [a custom build of Harmony ](https://github.com/Pathoschild/Harmony#readme ), which is
included in the `build` folder. To use a different build, just replace `0Harmony.dll` in that
folder before compiling.
2021-10-18 07:50:39 +08:00
2021-12-06 07:55:10 +08:00
## Prepare a release
### On any platform
**⚠ Ideally we'd have one set of instructions for all platforms. The instructions in this section
will produce a fully functional release for all supported platfrms, _except_ that the application
icon for SMAPI on Windows will disappear due to [.NET runtime bug
3828](https://github.com/dotnet/runtime/issues/3828). Until that's fixed, see the _[on
Windows](#on-windows)_ section below to create a build that retains the icon.**
2021-12-03 09:48:00 +08:00
2021-12-06 07:55:10 +08:00
#### First-time setup
2021-12-03 09:48:00 +08:00
1. On Windows only:
1. [Install Windows Subsystem for Linux (WSL) ](https://docs.microsoft.com/en-us/windows/wsl/install ).
2. Run `sudo apt update` in WSL to update the package list.
3. The rest of the instructions below should be run in WSL.
2. Install the required software:
1. Install the [.NET 5 SDK ](https://docs.microsoft.com/en-us/dotnet/core/install/linux-ubuntu ).
_For Ubuntu-based systems, you can run `lsb_release -a` to get the Ubuntu version number._
2. [Install Steam ](https://linuxconfig.org/how-to-install-steam-on-ubuntu-20-04-focal-fossa-linux ).
3. Launch `steam` and install the game like usual.
4. Download and install your preferred IDE. For the [latest standalone Rider
2021-10-18 07:50:39 +08:00
version](https://www.jetbrains.com/help/rider/Installation_guide.html#prerequisites):
```sh
wget "< download url here > " -O rider-install.tar.gz
sudo tar -xzvf rider-install.tar.gz -C /opt
ln -s "/opt/JetBrains Rider-< version > /bin/rider.sh"
./rider.sh
```
2021-12-03 09:48:00 +08:00
3. Clone the SMAPI repo:
```sh
git clone https://github.com/Pathoschild/SMAPI.git
```
2021-10-18 07:50:39 +08:00
2021-12-06 07:55:10 +08:00
### Launch the game
2021-12-03 09:48:00 +08:00
1. Run these commands to start Steam:
2021-10-18 07:50:39 +08:00
```sh
export TERM=xterm
steam
```
2021-12-03 09:48:00 +08:00
2. Launch the game through the Steam UI.
2021-10-18 07:50:39 +08:00
2021-12-06 07:55:10 +08:00
### Prepare the release
1. Run `build/unix/set-smapi-version.sh` to set the SMAPI version. Make sure you use a [semantic
2021-12-03 15:16:27 +08:00
version](https://semver.org). Recommended format:
2017-10-08 11:16:25 +08:00
2018-08-20 06:28:16 +08:00
build type | format | example
:--------- | :----------------------- | :------
2021-12-03 15:16:27 +08:00
dev build | `<version>-alpha.<date>` | `4.0.0-alpha.20251230`
prerelease | `<version>-beta.<date>` | `4.0.0-beta.20251230`
release | `<version>` | `4.0.0`
2017-10-08 11:16:25 +08:00
2021-12-06 07:55:10 +08:00
2. Run `build/unix/prepare-install-package.sh` to create the release package in the root `bin`
folder.
### On Windows
#### First-time setup
1. Set up Windows Subsystem for Linux (WSL):
1. [Install WSL ](https://docs.microsoft.com/en-us/windows/wsl/install ).
2. Run `sudo apt update` in WSL to update the package list.
3. The rest of the instructions below should be run in WSL.
2. Install the required software:
1. Install the [.NET 5 SDK ](https://dotnet.microsoft.com/download/dotnet/5.0 ).
2. Install [Stardew Valley ](https://www.stardewvalley.net/ ).
3. Clone the SMAPI repo:
```sh
git clone https://github.com/Pathoschild/SMAPI.git
```
### Prepare the release
1. Run `build/windows/set-smapi-version.ps1` in PowerShell to set the SMAPI version. Make sure you
use a [semantic version ](https://semver.org ). Recommended format:
build type | format | example
:--------- | :----------------------- | :------
dev build | `<version>-alpha.<date>` | `4.0.0-alpha.20251230`
prerelease | `<version>-beta.<date>` | `4.0.0-beta.20251230`
release | `<version>` | `4.0.0`
2. Run `build/windows/prepare-install-package.ps1` in PowerShell to create the release package
folders in the root `bin` folder.
3. Launch WSL and run this script:
```bash
# edit to match the build created in steps 1-2
# In WSL, `/mnt/c/example` accesses `C:\example` on the Windows filesystem.
version="4.0.0"
binFolder="/mnt/e/source/_Stardew/SMAPI/bin"
build/windows/finalize-install-package.sh "$version" "$binFolder"
```
2020-06-14 23:29:07 +08:00
2019-07-06 12:35:51 +08:00
## Release notes
2019-07-06 13:04:05 +08:00
See [release notes ](../release-notes.md ).