Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Kiramoji is a modified version of Kareha. Kareha is an anonymous message board, popular in Japan. No registration is required to post.

Anonymous message boards tend to put more emphasis on posted content, freeing the message authors from limitations and negative experiences typically present when using other messaging platforms. Should you wish to, you can, however, use the nickname everyone knows you by.

Kiramoji can operate in two modes, as an image board or a text board.

Kareha itself is an incredibly impressive achievement, many features are pushing Perl's boundaries, mostly using core dependencies and not a single C extension.

About this version

This is a modified version of The original Kareha, written by Dag Ågren/WAHa.06x36 in Perl. Later, it was further modified by hotaru2k3, fixing WebKit/related issues, as well as adding some minor changes.

This fork is based on the above mentioned modified version, with a few changes added here and there and it is probably the most recent and maintained version out there.

I am by no means a Perl expert, so pull requests and issues are more than welcome!

This is the version that runs on our KiraMoji page, feel free to stop by and say hi!

There exists an older PSGI version here based on 3.1.4.

Similarly to Kareha's license, this mod is released into the public domain.

Changes in this version

  • Added Spanish template (thanks to Guilevi)
  • Templates are modified to have some ARIA attributes, edit fields in particular, as well as some links are properly labelled for screen readers.
  • If the board operates in paged mode, page navigation controls are displayed at the bottom of the page for text boards.
  • param-related bugs have been fixed, so there are no CGI warnings anymore.
  • Added a dice roller for the link field. The syntax is: size d NumberOfDice +/-modifier (optional) a/d (ascending/descending sorting, optional). (for example 6d5+100d will roll 5 6-sided die, add 100 and sort the result in descending order)
  • Switched the encoding to UTF-8. This means that messages, templates and the config file are expected to be encoded using UTF-8.
  • Swapped out the SillyName generator to an adjective/noun-based one, based on
  • Added a protocol option which can be changed in, used when generating page links and feeds.
  • A more up-to-date spam file, taken from the official Kiramoji instance.
  • Atom support
  • Properly URL decode unicode characters when previewing post.

Known issues

  • The Japanese template does not have the ARIA fixes nor pagination, as I unfortunately do not speak Japanese. Pull requests are welcome!

Changes in hotaru2k3!s fork

This is a modified version of Kareha. some bugs that can cause xhtml errors have been fixed, and a few minor features have been added.



First and foremost, you will need a webserver. Apache is a good choice, or Caddy if you prefer something more modern and awesome.

Caddy 1

When you download/build Caddy, you will need the http.cgi middleware. Add it in the plugins section.

Caddy 2

When building Caddy 2 via xcaddy, you can use instead. See examples on the same Github page.


Kiramoji does not require much, it should work on most distributions out of the box. The only exceptions are Perl's CGI and utf8::all modules. You can use a package manager, such as cpan or cpanminus to install them.

WARNING: Your version of Perl must be 5.24 or newer.

In case your server does not come with Perl by default, you can install it via your package manager, or perlbrew. Refer to its documentation for help, usually man packageManagerName will do the trick.

Setting up Kiramoji

  1. git clone
  2. Copy everything to your cgi-bin directory.
  3. Make sure and has execute permission (+x).
  4. Make sure that the main Kiramoji directory and the res directory are writable (+w).
  5. Copy everything from one of the mode directories, either message or image, depending on what kind of board you wish to have.
  6. Modify, in particular uncomment and change ADMIN_PASS_ and SECRET.
  7. If your web server uses https and it does not redirect to it from http by default, edit and change the $protocol variable to https. This is for generated links only, it does not add TLS support.
  8. Open to generate the index page.



How do I run multiple boards?

You can install Kiramoji in multiple directories (see the installation steps above), or you can symlink the files. The Lndir command is quite useful to do this.

What are tripcodes and Capcodes and how do I use them?

Tripcodes are special hashes of a poster, they are generally used for authenticity. You can use them in the name field when posting. For example:

YourName#password (less secure)


YourName##password (more secure, based on the SECRET you've changed in the config file.)

Capcodes are defined in, and they are used to replace shown tripcodes with arbitrary text. For example: !!S5RPiYbB could be replaced with Admin.

What is sage and how do I use it?

Sage is a way to post without bumping a thread, i.e. moving it to the top of the list. You can post using sage by entering sage in the Link field.

My board's title contains accented characters and it does not display correctly. Why?

Kiramoji is now using UTF-8. Please make sure that your configuration file is encoded as UTF-8.

My template has accented characters and it does not display correctly. Why?

Kiramoji is now using UTF-8. Please make sure that your template file for your language (e.g. JP) is encoded as UTF-8.

How do I switch to a new template?

You need to edit and change the line:

BEGIN { require ''; }

to reflect the new templates filename.

An alternative method is to rename whatever templates file you wish to have to Make sure you have a backup version of the old file, in case you wish to switch back to the original.