goro is an open Ragnarok Online client recreation implemented in Go.
The runtime uses GoGPU/wgpu for the window and presentation path, with a modern GPU pipeline and Vulkan support. Built 100% in Go without CGO, it is fully statically compiled and can be easily deployed.
This project wouldn't be possible without the existence of other open source clients like ROBrowser Legacy and Open Midgard and their reverse engineering efforts.

Visit the project website or see Goro in action on this YouTube playlist.
We also have an active Discord to provide live support and news.
gogpu/ui.Ragexe and Sakexe.CGO_ENABLED=0 go build -tags nofakecgo .
./goro
Configuration precedence, from highest to lowest:
--vsync=false.--config <path>.goro.ini in the directory explicitly supplied with --data-dir, if it exists../goro.ini in the working directory, if it exists.Goro only searches the locations above; it does not automatically read or write
config files in system or per-user directories such as /etc or $XDG_CONFIG_HOME.
A missing explicit --config file is an error.
In-game settings, remembered login IDs, and chat shortcuts are saved to the
--config file when supplied, otherwise to --data-dir/goro.ini when --data-dir
is supplied, otherwise to ./goro.ini. A missing data-directory or working-directory
file is created when saving preferences.
Example goro.ini:
data_dir = /home/kivutar/Téléchargements/OldRO
[window]
width = 1280
height = 720
fullscreen = false
[packet]
client_date = 20080910
profile = 23
[audio]
bgm = true
bgm_volume = 0.55
[render]
graphics_api = vulkan
vsync = true
[network]
trace = false
Command-line options override the ini file:
CGO_ENABLED=0 go run -tags nofakecgo . --data-dir ~/kRO --fullscreen
CGO_ENABLED=0 go run -tags nofakecgo . --config ./goro.ini --bgm=false --graphics-api vulkan
Useful options:
--net-trace
--packet-client-date 20211103 # only when rAthena is rebuilt for that packetver
--fullscreen
--bgm=false
--bgm-volume 0.35
--no-audio # disable BGM and SFX output entirely (useful for profiling)
--graphics-api gles # fallback if Vulkan is unavailable
--vsync=false # unlock fps
--username <username> # prefill the username in login window
--password <password> # same for password
--autologin=true # perform server connection and login on startup
--force-user-ai=true # start homunculus and mercenary in USER_AI custom mode
--script <path> # run an optional Lua character-control script in game
These are tutorials on how to setup a development environment.
Runtime data is discovered from, in order:
--data-dirdata_dir in goro.iniThe resource manager currently looks for loose files such as:
data/clientinfo.xmldata/sclientinfo.xmlclientinfo.xmlsclientinfo.xmlSystem/clientinfo.xmlSystem/sclientinfo.xmlCurrently implemented (not a claim of complete reference-client parity):
/bm), direct typing, and F12 shortcut-bar switching1,074 commits
2 commits
Go
99.0%
goro is an open Ragnarok Online client recreation implemented in Go.
The runtime uses GoGPU/wgpu for the window and presentation path, with a modern GPU pipeline and Vulkan support. Built 100% in Go without CGO, it is fully statically compiled and can be easily deployed.
This project wouldn't be possible without the existence of other open source clients like ROBrowser Legacy and Open Midgard and their reverse engineering efforts.

Visit the project website or see Goro in action on this YouTube playlist.
We also have an active Discord to provide live support and news.
gogpu/ui.Ragexe and Sakexe.CGO_ENABLED=0 go build -tags nofakecgo .
./goro
Configuration precedence, from highest to lowest:
--vsync=false.--config <path>.goro.ini in the directory explicitly supplied with --data-dir, if it exists../goro.ini in the working directory, if it exists.Goro only searches the locations above; it does not automatically read or write
config files in system or per-user directories such as /etc or $XDG_CONFIG_HOME.
A missing explicit --config file is an error.
In-game settings, remembered login IDs, and chat shortcuts are saved to the
--config file when supplied, otherwise to --data-dir/goro.ini when --data-dir
is supplied, otherwise to ./goro.ini. A missing data-directory or working-directory
file is created when saving preferences.
Example goro.ini:
data_dir = /home/kivutar/Téléchargements/OldRO
[window]
width = 1280
height = 720
fullscreen = false
[packet]
client_date = 20080910
profile = 23
[audio]
bgm = true
bgm_volume = 0.55
[render]
graphics_api = vulkan
vsync = true
[network]
trace = false
Command-line options override the ini file:
CGO_ENABLED=0 go run -tags nofakecgo . --data-dir ~/kRO --fullscreen
CGO_ENABLED=0 go run -tags nofakecgo . --config ./goro.ini --bgm=false --graphics-api vulkan
Useful options:
--net-trace
--packet-client-date 20211103 # only when rAthena is rebuilt for that packetver
--fullscreen
--bgm=false
--bgm-volume 0.35
--no-audio # disable BGM and SFX output entirely (useful for profiling)
--graphics-api gles # fallback if Vulkan is unavailable
--vsync=false # unlock fps
--username <username> # prefill the username in login window
--password <password> # same for password
--autologin=true # perform server connection and login on startup
--force-user-ai=true # start homunculus and mercenary in USER_AI custom mode
--script <path> # run an optional Lua character-control script in game
These are tutorials on how to setup a development environment.
Runtime data is discovered from, in order:
--data-dirdata_dir in goro.iniThe resource manager currently looks for loose files such as:
data/clientinfo.xmldata/sclientinfo.xmlclientinfo.xmlsclientinfo.xmlSystem/clientinfo.xmlSystem/sclientinfo.xmlCurrently implemented (not a claim of complete reference-client parity):
/bm), direct typing, and F12 shortcut-bar switching1,074 commits
2 commits
Go
99.0%