May 22nd 2025: A large number of spam user accounts have been removed from the wiki. If your account was accidentally deleted during this process, please get in contact to have it restored!

Choosing a SHIORI

Choosing a SHIORI
Type Guide
Category Other

What are SHIORI, where can you find information about them, and which should you choose for your ghost? This guide will give a brief explanation of SHIORI, as well as information and resources for the SHIORI that have been explored by the English community so far.

You can also see the SHIORI page for more information, which has a list of SHIORI, including ones that we haven't made any resources for.

What is SHIORI?

SHIORI is a term that can have two meanings. It refers both to the SHIORI protocol, which is the standard that the baseware uses to communicate with ghosts, and it is also used as a term referring to the programming languages that ghosts are written in, which are used to create the ghost's personality and functions.

In the case of this guide, we will be using this latter definition. This is the more common usage, and it is easier to say than “ghost programming language”.

Types of SHIORI

There are, in a manner of speaking, two types of SHIORI. There are those which have been created as a programming language specific to ghosts, and there are those which are created to act as a go-between between an existing programming language (such as Ruby), and the SHIORI protocol used by ghosts. These types of SHIORI allow languages such as Ruby to be used to make a ghost, without creating their own unique syntax.

The idea of making ukagaka seems to attract writers and artists the most, so SHIORI that were created to be a programming language specifically for ghosts seem to be much more popular. This is likely due to their simplicity, and being keyed to the kinds of work that ghost authors want to do specifically.

If you are a programmer and want a SHIORI that will allow you to use an existing programming language to make a ghost, you may want to try one of the SHIORI linked on this gist (Japanese), or on our list of SHIORI.

The prevelance of Satori in the Japanese community

It is worth noting that while there are many SHIORI created by the Japanese community, the Japanese community is completely dominated by the SHIORI Satori (里々). This is likely due to Satori's simplicity and ease of writing dialogue, as well as the fact it uses characters from the Japanese keyboard as shortcuts for common SakuraScript tags, and so on. This makes it quick and easy for Japanese developers to write in, because it cuts down on the need to switch keyboards to write tags.

Additionally, there exists a tool in Japanese called Satolist1) (さとりすと), which is a GUI program that makes it much easier and more approachable for non-programmers to make ghosts.

With these factors together, Satori is far and away the most popular SHIORI in the Japanese community, with some estimates claiming it is used in approximately 90% of all Japanese ghosts.

Unfortunately, due to its reliance on Japanese characters, and Satolist's interface being in Japanese, it is not suitable for international development. As such, in the English community, other SHIORI have flourished out of necessity, and Satori is practically never seen.

Which SHIORI should you use?

That depends on what your existing skills are, how much you want to learn, and what best suits your project! Have a look through the list below, and at the resources and templates linked, so that you can make an informed decision. This list will be updated over time as we make resources for more SHIORI.

YAYA

YAYA (やや2)) is a programming language with syntax similar to C, albeit very simplified.

It has been the SHIORI of choice for most English ghosts, because it is the first SHIORI that the English community found documentation for and could understand, as well as being well suited for developers internationally. As such, there are many resources in the English community for YAYA, as well as plenty of ghosts that can be referenced. YAYA has seen use in the Japanese community as well, being one of the more common SHIORI behind Satori.

While it can be very simple and straightforward to work with, it is also very flexible, and powerful for making ghosts in. It can also be used to create MAKOTO, Plugins, and can even be used as a Windows dll file to create non-ukagaka related things.

However, it also tends to intimidate developers who don't know anything about programming yet, due to its structure being like that of C. But with a little willingness to learn, or basic knowledge from other languages such as JavaScript or Python, it is quick to pick up and use.

Resources
Download https://github.com/ponapalt/yaya-shiori/releases
Official documentation AYAYA wiki
English guide(s) YAYA Fundamentals
English template(s) Simplicity Template, Minimum YAYA Template, GT Ghost Template, First Child Template, X. Template
Syntax highlighting ayaya (VS Code Syntax Highlighting), aya-udl-xml (NotePad++ Syntax Highlighting), see below for Notepad++ recommendations
More on this wiki

Code examples

//This causes 1 of these 3 dialogues to play at random whenever the ghost is booted.
OnBoot
{
    "\0Boot dialogue 1"
    "\0Boot dialogue 2"
    "\0Boot dialogue 3"
}
//This displays a simple menu with just a greeting and a cancel button when the Sakura or Kero is double clicked.
OnMouseDoubleClick
{
    if reference5 == 0 //Only happens for left clicks
    {
        if reference3 == 1 //Kero
        {
            "\1Kero menu greeting\n\n"
            --
            "\![*]\q[Cancel,blank]"
        }
        else //Sakura (or other character)
        {
            "\0Sakura menu greeting\n\n"
            --
            "\![*]\q[Cancel,blank]"
        }
    }
}

Code highlighting

When using Notepad++, the built in C language is fairly accurate for YAYA code. It can be enhanced by adding custom keywords in the style configurator.

The following should be added to the INSTRUCTION WORD setting:

elseif when others foreach

The following may be added to the TYPE WORD setting:

parallel random nonoverlap sequential array pool melt all last
nonoverlap_pool sequential_pool array_pool pool_nonoverlap pool_sequential pool_array
melt_nonoverlap melt_array melt_sequential

AYA

AYA (文) is the language that preceded YAYA. They are effectively the same language, except that YAYA has additional features, as well as important security updates. For this reason, it is not recommended to use AYA to create new ghosts. If you have a ghost in AYA that you would like to convert to YAYA, there is a guide on how to do so here.

The resources listed here are primarily for historical purposes. No code examples are provided because the ones provided for YAYA will work for AYA too.

Resources
Download http://umeici.onjn.jp/ (Included with Konno Ayame (紺野あやめ by 文5.8) template)
Official documentation aya5 - manual
English guide(s) N/A, but the guides listed for YAYA will mostly apply here as well
English template(s) GT Ghost Template (An older version exists in AYA, although it is deprecated)
More on this wiki

Kawari

Kawari (華和梨) is a writing-focused SHIORI, with an emphasis on flexible “entries” that can be used to create complex dialogue variations. Ghosts made in Kawari also frequently use a “middleware” system, which is an additional layer of coding between the SHIORI and the developer. A middleware enables the developer to write dialogue easily, without needing to write their own code to handle events. This makes it much friendlier for developers that are not inclined towards coding.

This is the second SHIORI to be properly explored by the English community, with resources and ghosts written in it beginning to come out in 2023. It is also a SHIORI that has seen a fair amount of use in Japanese ghosts.

Resources
Download https://sourceforge.net/projects/kawari/
Official documentation Kawari (Machine Translated)
English guide(s) Kawari no Kawari
English template(s) CHIPS Template, MesoMeso
More on this wiki

Code examples

Code examples using the middleware included in CHIPS Template

Code examples with no middleware

Satori

Satori (里々) is a SHIORI specialized for the Japanese language, and specifically Japanese keyboards. It provides several shortcuts for common SakuraScript tags using full-width Japanese characters (such as full-width parenthesis, colons, asterisks, and more), eliminating the need to switch between input types for writing basic scripts.

It also lessens the need to be familiar with programming to make simple ghosts. Using the IDE Satolist, it is possible to write a ghost using a GUI, making it easier for artists and writers with no coding knowledge to create a ghost.

It is not recommended for developers not writing in Japanese. Its reliance on Japanese characters makes it easier for devs writing in Japanese, however, this necessarily means that any other language must take additional steps to write those Japanese characters, therefore losing time instead of saving it. Additionally, there may be charset issues, etc.

Satori has had some investigation by the English community, but not extensively at this time due to the aforementioned issues. It is extremely prevalent in the Japanese community due to its ease of writing and accessibility, as outlined in a previous section of this guide.

Resources
Download https://github.com/ukatech/satoriya-shiori/releases
Official documentation Satori wiki
English guide(s) Satori (里々) English Guide
English template(s) N/A
IDE Satolist (Satolist wiki)
More on this wiki

Code examples

#This causes 1 of these 3 dialogues to play at random whenever the ghost is booted.
*OnBoot
:Boot dialogue 1

*OnBoot
:Boot dialogue 2

*OnBoot
:Boot dialogue 3
#These display simple menus with just a greeting and a cancel button when the Sakura or Kero is double clicked.
#(R5)==0 means this will only happen for left clicks.

*OnMouseDoubleClick【タブ】(R3)==0&&(R5)==0
\0Sakura menu greeting\n\n\![*]\q[Cancel,blank]

*OnMouseDoubleClick【タブ】(R3)==1&&(R5)==0
\1Kero menu greeting\n\n\![*]\q[Cancel,blank]

Aosora

Aosora (蒼空) is a SHIORI that began development at the end of 2024, announced with an article in the 伺か・伺的 Advent Calendar for that year. It aims to allow the ease of writing of Satori, while also being flexible and allowing for powerful processing.

At this time, this SHIORI is still in very early days, and it is noted that specifications may change over time as it is developed, or that development may halt.

One of the advantages for international development is that, unlike Satori, Aosora does not rely on characters from the Japanese character set. This makes it much more accessible, while still letting scripts be written in a very simple fashion.

Special syntax is provided for use in “talk blocks”, which can make the appearance of dialogues much more natural in the file. For example, line breaks are printed as line breaks in the balloon, and a new line starting with a : will switch which character is speaking. A number may be written before the :, such as 0:, to specify a particular character should speak.

Resources
Download https://github.com/kanadelab/aosora-shiori/releases
Official documentation aosora-shiori ゴースト開発ガイド
English guide(s) (en‐us)Tutorial aosora‐shiori
English template(s) N/A
Syntax highlighting vscode-extension, Aosora talk block UDL, see below for Notepad++ recommendations
More on this wiki

Code examples

//This causes 1 of these 3 dialogues to play at random whenever the ghost is booted.
talk OnBoot
{
    Boot dialogue 1
}

talk OnBoot
{
    Boot dialogue 2
}

talk OnBoot
{
    Boot dialogue 3
}
//This displays a simple menu with just a greeting and a cancel button when the Sakura or Kero is double clicked.
function OnMouseDoubleClick
{
    if (Shiori.Reference[5] == 0) //Only happens for left clicks
    {
        if (Shiori.Reference[3] == 1) //Kero
        {
            return KeroMenu;
        }
        else //Sakura (or other character)
        {
            return SakuraMenu;
        }
    }
}
 
talk SakuraMenu
{
    \0Sakura menu greeting
 
    \![*]\q[Cancel,blank]
}
 
talk KeroMenu
{
    \1Kero menu greeting
 
    \![*]\q[Cancel,blank]
}

Code highlighting

When using Notepad++, the built in JavaScript language is fairly accurate for Aosora code. It can be enhanced by adding the following keywords to the INSTRUCTION WORD setting in the style configurator:

talk function word for while if else break continue
return local const true false try catch finally throw class member
init new print

Note that this may not be desirable for files made primarily of talk blocks. In those cases, the Aosora talk block UDL may be preferable.

1)
This link is actually to Satolist2, which is a successor to the original Satolist
2)
Sometimes seen this way, but it is usually referred to the same as AYA, with “文”, or just as “YAYA”