Quick overview

If you don't want to fall intro doom of NOMRHIS complexity, this page is the best place to start.

Step 1. Understanding NOMRHIS.

NOMRHIS is big pile of subsystems. But in simple words it is a client-server protocol. NOMRHIS server content is of general kind. Also NOMRHIS servers can refer you to another servers (like hyperlinks). In such client-server systems client programs are called browsers and started servers are called sites.

Browser and sites

Nothing new at this moment. This model works in superset of HTTP, HTML, CSS, JavaScript and other protocols and languages known as Web.

Now the first difference is that NOMRHIS is I/O-oriented rather than document-oriented. So when it comes to real things Web-browsers says "give me document (with some scripts attached)" while NOMRHIS-browser says "give me program to control final image display, audio I/O and user input (with fonts, textures, models, text documents or whatever else attached)".

The second difference is about network connection itself. NOMRHIS-browser connects once and keep session open while Web connections are stateless. So in NOMRHIS both client and server side script states aren't restarted during session.

And finally NOMRHIS-browser is monolithic open source program without any plug-ins and extensions. Lua environment isolates client-side scripts from system. This attitude provides stable and secure browsing.

Step 2. Understanding server implementation.

NOMRHIS-site developer is not bound to official server implementation since all the source code is open and documented. But if you choose the official way, here are several ideas about it.


Official NOMRHIS basic server. It implements only common networking stuff and general application architecture. NomrhisD dispatches incoming connections to NomrhisD plug-ins. So to run a NOMRHIS site you need a plug-in to be based on.


NOMRHIS-sites are implemented through plug-ins. Language bindings are also plug-ins. But if program is written in C, such plug-in gets directly instantized into site.


To run a NOMRHIS site NomrhisD actually needs to know 2 things: path to plug-in file and path to working directory. After that new thread is started and plug-in code is executed. Now server will dispatch incoming connections to that thread if correct site name is requested. The idea is simple: incoming connection listeners live at one single thread but each site reside on it's own thread. As a result many sites may be accessed through one single TCP port on one single network interface as well as one site may be accessed through many TCP ports and network interfaces.

Step 3. Running examples.

Time for practice. You need Kernel Panic (the browser) on client side. On server side (perhaps, the same host) you need NomrhisD (the basic server) and Example pack. Examples are easy to build so you should have no problems with building and running example server. Play with examples for a while to get the idea.

Step 4. Planning real site.

We are finally coming to real thing. Real programs usually need serious attitude. There are two questions you should ask yourself first:

  • What subsystems are to be implemented on client side, on server side, on both sides (with defined interaction protocol)?
  • What resources are to be developed?

Server-side subsystems

Final list of subsystems and architectural choices depends on your goal. Here are few examples of server-side subsystems:

  • Base server program language
  • Database
  • Game physics
  • Traffic load balance
  • Scale out technics
  • Server-to-server interaction mechanism (if more than one server is involved)

Client-side subsystems

Although client-side Lua environment provides powerful instruments many things are to be implemented in pure Lua. Here are some subsystem examples:

  • Widget system and GUI
  • Languages support
  • Document rendering systems
  • Animation
  • Physics prediction

Both sides subsystem

  • Resource caching system
  • Physical event messaging system
  • Video streaming system


  • Models
  • Animations
  • Textures
  • Fonts
  • Audio
  • Video
  • Text documents

Once you have decided what you may take a look at already existing implementations and put it into your project (probably improving). If you haven't found what you need you may use help of community (maybe someone else need the same thing). And from that moment you will have a picture of work to do.

Quick overview