Firestr v0.1

I have published the first version of my new project Firestr (pronounced Fire Star)

It is a simple platform for distributed communication and computation. Imagine a P2P chat program where instead of sending messages of text, sound, or video, you send software, that runs immediately and automatically connected.


In a session with others, you pick an app from your collection and it appears on their machines. The application starts running immediately and all instances are connected to each other automatically.


If your friend or loved one like the program, they can add it to their collection and be able to send it to others.

The apps are currently written in the Lua programming language, but support for others is in the cards. There is a built in code editor, that also works in a distributed way. You can work on a program with a buddy.


As a fellow nerd, I want my son to at least try programming when he gets old enough. When I started, it was actually very easy because we had languages like BASIC where I can draw and play with quickly.

This is the goal of Firestr. Make it so easy that children can start programming immediately and share their creation with their friends. The programs they write can be stand alone, or interconnected. They don’t have to understand network programming to make programs that work across the network. A child understands the idea of passing a note to another, and this is how Firestr works.

Many ask “How is this different than web apps?”. There are several key differences between this and the web.

1. It is a push model, not a pull model. Software is not downloaded from someone, but uploaded to someone.

2. It is decentralized. The web is built around a server/client model. Web servers are centralized modes of communication and have to be on the public internet to function across the internet. Firestr is based on a P2P model, and communication happens between peers instead of through a central server. WebRTC tech is pushing browsers into a hybrid server/client and P2P model. I am excited about that.

3. There is only one language to know, Lua. Web programming requires knowledge of several languages and is a difficult barrier. HTML, CSS, Javascript, and some back end language, XML, databases, the list goes on an on.

4. Eventually, all communication between Firestr instances will be encrypted. I am working towards encrypted only communication.

5. Built on a trust network. You have to be deliberate to connect to people you do not know. This means you can trust others to send you non malicious software. And because all apps can be cloned and edited, you always know what is going on.

6. You can share your software with others effortlessly. Even open source and free software web applications require understanding how to setup http servers, databases, etc. You cannot simply give someone software for them to copy and modify. With firestr, the software is zero config and copying it to your machine is one button press.

The last bit is that the UI is deliberately modelled after a chat application instead of a windowed operating system. I want to make the interactivity explicit and convey time in a natural and expected way. I am hoping that through this restriction, there will be some creativity.

This is only the first version. There are lots of bugs and lots of missing features. You cannot remove people from your contacts, or apps from your collection. There are bugs in the networking and bugs in error handling. But I wanted to get something out that works as quickly as possible for people to try.

You can see the code on

If you are interested in helping me make this great, email me at

The software is GPLv3


The software is in development. There is NO security and therefore use this AT YOUR OWN RISK.

If you are a security expert, please contribute.

About these ads

6 thoughts on “Firestr v0.1

  1. Mempko — This is an AWESOME project with a super-hungry vision. I’m super excited about it. I haven’t ever done anything in Lua, but I may just have to give it a try so that I can contribute a patch to this.

  2. This looks like a great way to distribute malware. It will enable a completely new generation of malware distribution models to evolve.

  3. I know you specifically discredit the idea of making a web app, but seriously making this a web app will increase its potential audience by multiple orders of magnitude. Multiple orders of magnitude is like the difference between going to the bathroom and going to the other side of the globe.

    The only part of your plan that doesn’t seem to be immediately achievable as a web app is the “pure” p2p aspect, but that’s just a waiting game until WebRTC happens. Regardless, only geeks would care about (or even understand) the “pure p2p” aspect. Children don’t care; all they see is that they are connected with others.

    Basically you can just write this program as a web app instead of Qt, but the “apps” that people write *inside* of it can be anything. For simplicity, you can just use `eval()` and put whatever libraries you want in there (i.e. custom ones that paint a simple layer over the underlying madness). e.g. instead of `app:button(“hi”)` (Lua) you have `app.button(“hi”)` (JavaScript), and then you do whatever is needed to uphold that simple facade.

  4. Sean,

    The p2p already works. It has been achieved. It is still version 0.1, and there are bugs, but it works in your LAN and it works over the internet, over NAT.

    I will eventually support STUN and TURN. But for now it is functional.

    Go to the githib page. Compile it and try it yourself.

  5. Pingback: Write a distributed white board app using Firestr | Mempko's Thinky Thinky

  6. Pingback: The Inverse Web | Mempko's Thinky Thinky

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s