Skip to content
The legendary hero that can create various Nintendo Switch formats from her rusty crossbows
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github
ci
src linkle: Fix NSO cmdline generating NRO instead of NSO Mar 3, 2019
.gitignore
.travis.yml
Cargo.lock
Cargo.toml
LICENSE-APACHE
LICENSE-MIT
README.md
appveyor.yml

README.md

MIT license Apache 2 license Discord

Introduction

This program permits to convert or create various formats used on the Nintendo Switch. For now, it only supports the creation of PFS0/NSP and 64 bits NRO/NSO. It can also be used with cargo through cargo nro to simplify the build process of Megaton-Hammer homebrew.

Installation

Assuming you have cargo installed, cargo install --features=binaries --git https://github.com/MegatonHammer/linkle will install this program, by the command name linkle and the cargo nro subcommand.

Usage

Creating a NRO file:

linkle nro input.elf output.nro

Creating a NSO file:

linkle nso input.elf output.nso

Creating a PFS0/NSP file:

linkle pfs0 input_directory output.pfs0

Creating a NACP file:

linkle ncap input.json output.nacp

Creating a RomFs file:

linkle romfs input_directory output.romfs

Compiling and creating an NRO file (requires xargo from https://github.com/roblabla/xargo installed):

cargo nro

Cargo.toml metadata format

When compiling a project with cargo nro, a special [package.metadata.linkle.BINARY_NAME] key is used to allow customizing the build. This is an example Cargo.toml:

[package]
name = "link"
version = "0.1.0"
authors = ["linkle"]

[package.metadata.linkle.megaton-example]
romfs = "res/"
icon = "icon.jpeg"
titleid = "0100000000819"

[package.metadata.linkle.megaton-example.nacp]
name = "Link"

[package.metadata.linkle.megaton-example.nacp.lang.ja]
"name": "リンク",
"author": "リンクル"

All paths are relative to the project root (where the Cargo.toml file is located).

Every field has a sane default:

Field Description Default value
romfs The application romfs directory. res/
icon The application icon. icon.jpg
title_id The application title id. 0000000000000000

The [package.metadata.linkle.BINARY_NAME.nacp] key follows the NACP input format

NACP input format

This is an example of a compatible JSON:

{
    "name": "Link",
    "author": "Linkle",
    "version": "1.0.0",
    "title_id": "0400000000020000",
    "lang": {
        "ja": {
            "name": "リンク",
            "author": "リンクル"
        }
    }
}

Fields

NOTE: Every fields are optional

Field Description Default value
name The application name. Unknown Application
author The application author. Unknown Author
version The application version. 1.0.0
title_id The application title id. 0000000000000000
dlc_base_title_id The base id of all the title DLC. title_id + 0x1000
lang (object) Different name/author depending of the language use name and author
Supported Languages
en-US
en-UK
ja
fr
de
es-419
es
it
nl
fr-CA
pt
ru
ko
zh-TW
zh-CN
You can’t perform that action at this time.