title graphic: neschat design overview

Here, I explain how a chat, forum, and wiki system could be composed of the same very simple set of features. I think if we made this, it would be the most healthy online social environment to exist for some time to come.

I've whittled off most of the major design ambiguities, here. It looks like this would be relatively simple to make. So, shall we do it?


Conceptually, there are basically only two things you can do in neschat, you can find or create an object and make it a reply to another object, and you can subscribe to an object to be notified of its new replies. Those two core interactions are basically enough to create a combined wiki, forum, realtime chat and content sharing system out of the same stuff, interleaved.

(Technically, making that work is a a bit more complicated and involves a couple of other features, but that's the core concept.)

neschat consists of a forest of trees of objects.

Most objects are comments, but some are polls, some are configs, and some are user profiles.

When an object is inserted into another object, it can be seen under it, like a reply.

Every object has the following permission groups:

Any of these can be set to inherit from their primary parent.


A Way describes a way of using some part of neschat object tree.

Having this is crucial, for the same reason Vim would be a pretty terrible program if configuration files couldn't be downloaded from experienced users. There are so many different ways you could use neschat, the choices are overwhelming. The Way recommended to you will give you focus and clarity.

Ways are kept as objects. Users can choose to install a Way when they find it.

I've made them out to be something pretty abstract, but in the first version, installing a way just puts some links in your sidebar!

Generally, these links open feeds that are defined over the replies to particular key objects, which are usually Owned by the same person who owns the Way (The Way can be edited and updated). For instance, say there's a global boating community called "sailing". This community's Way might have a feed called "part recommendations", that shows the newest replies to the "part recommendation" object that can be found under the main community "sailing" object. Object nesting provides a way of organizing and navigating the community's information.

A Way's description of a feed basically just says

Often it will be newest first, sometimes oldest, sometimes manually ordered by curators, and later we can add more complicated stuff like vote sorting.

For the first version, we could implement Way objects as a blob of text defining an s-expression that specifies the Way. But they should probably at least have a type field communicating that they are a way (rather than just a comment), so that neschat can include a button that says "install this Way".

From these few systems, much is possible:

This is all a subset of the planned functionality of my project tasteweb, AND I'm pretty sure it's going to be a subset of whatever roamresearch is going to evolve into (which, well, might also be a superset of tasteweb), but who knows how long it'll take those projects to get to this point. We can implement this set of functionality now, so maybe we should? (EDIT: I just looked in on Athens and it seems like they're very quickly heading in a direction where they'll be ready to do all of this. It seems like they may have managed to develop an abstraction that will save them from the complexity snowballing that may kill roam and did kill google wave. I should probably think about joining with Athens.)

How I would like to go about this

If you'd be interested in helping to build this, lodge a reply to this thread on mastodon HERE. (EDIT: we probably shouldn't just do it ourselves. We should probably contribute to Athens.)