The YSLib Project is a project of platform-neutral framework consists of several multi-licensed open source libraries. It is aiming to develop native applications in a naturally cross-platform manner.

See LICENSE.TXT in the source directory for licensing affairs.

The main part (except libraries not being maintained in this project) of the libraries is coded in C++, which is strictly conforming to ISO/IEC 14882. (For features being used, see here. For some issues concerned with this project, see here.)

The project is currently in Alpha state(zh-CN) with following interface compatibility strategies:

  • ABI compatibility for any revision depending on specific platform, toolchain or build configuration is never guaranteed.
  • ABI compatibility may not be retained between releases with same platform, toolchain and build configuration.
  • API of libraries may be modified locally and there is no guarantee for compatibility between releases.
  • UI of tools (see contents(zh-CN) for the list) may be modified progressively across builds; unless specified elsewhere, added features are kept being backward compatible within at least one next releases.

See here(zh-CN) for basic steps to use YSLib in development.

See here(zh-CN) for releases and plans.

Currently supported platforms

  • (Nintendo/iQue) DS (arm-none-eabi)
  • MinGW32 (i686-w64-mingw32, compatible with i686-pc-mingw32)

Pending supported platform

  • Android (arm-linux-androideabi)
  • MinGW64 (x86_64-w64-mingw32)
  • Linux32 (i686-linux-gnu)
  • Linux64 (x86_64-linux-gnu)


Documentation in the YSLib project

Documentation in the YSLib project consist of several parts:

  • The development documentation which is intended for the project maintainers, see development(zh-CN).
    • The document in /doc/vsd can be viewed by Microsoft Office Visio or Microsoft Visual Studio 2013.
  • Souce code documentation, which can be generated using Doxygen, see building documentation(zh-CN).
    • Currently the Doxygen commands in the source code are mainly coded in simplified Chinese. It is planned to utilize Doxygen's ~[LanguageId] command to generate multilingual documents in future. All other comments, however, should be in English by default.
  • Other non-generated documents are text files in the repository, like Readme.zh-CN.txt.

About this wiki

This wiki is a project related to the YSLib project. They are currently the only two members in the same project group, each has separated repository. Common documentation for the project group, general user documentation and list of significant features for the YSLib project are dominated by this wiki. Documentation in the YSLib project is mainly for maintainers of the project. They are bidirectionally referenced, namely the content of this wiki may be refenenced in the YSLib project and vice versa.

Unless otherwise specified, the content of this wiki is fit for the current last master branch revision (i.e. the revision tip of master branch in the repository).

See here for rules to edit this wiki.

It is intended to reference every pages of this wiki in this page.


Contributions to the projects are welcomed. Provided materials thereby shall be adjusted by contributors (and the project maintainer) to conform the license of the corresponding projects if necessary.

Rules in this wiki are treated as consensus. Rules in project documentation have effect on maintainers but not other contributors. However, the contents in the projects shall always be conforming to the project rules.

To feedback or report issues, use Bitbucket issue tracker, or contact the project maintainer as noted below.

Rules for project contents

The following philosophy are generally accommodated throughout the projects.

  • Do not reinvent the wheel. Projects here only accepts modular components which would be better elsewhere. Here "better" is defined as "superior than current solution in at least one aspect for consensually known need".

    • See the notes in features(zh-CN) for the list of invented wheels and the rationale.
  • Decline premature optimization. However, what is "premature" is determined by the need, which would be probably variable.