Pure and Simple. This site is dedicated to full stack Erlang applications: SLICE, VXZ, N2O, KVS, SHEN, REST, MAD, BPE, MQS, FORMS, UPL. They provide you services such as provisioning instances, development tools, frameworks, business engines and languages.
Minimal and Effective. Because everything is so small that can fit your old FD, everything is also fast. We tried to keep number of levels and operability points as small as possible, keeping in mind the full stack of application.
Unikernel Based. This stack can be provisioned in Erlang Xen containers under LING. So you can run full stack in Xen (without OS) or in posix modes. Also all aplications could be shipped as a single-file bundle which is able to run in Windows, Linux and Mac environments with LING or BEAM virtual machine.
N2O provides a microcore based on chain of handlers applied to each websocket request. It also provide core services such as ETS-based expirable sessions, error formatting and logging, term pickling, message queue service and others. The most comprehensive part is the complete set of HTML elements. The JavaScript issuing withing IO protocol messages #wire and #js could be extended with shen JavaScript-subset language.
update(Name,Render)
insert_top(Name,Render)
insert_bottom(Name,Render)
insert_before(Name,Render)
insert_after(Name,Render)
remove(Name)
wire(Wiring)
async(Name,Fun)
flush(Name)
pickle(Term)
depickle(Binary)
session(Key)
session(Key,Term)
user()
user(User)
send(Name,Term)
reg(Name,Term)
unreg(Name)
q(Name)
qc(Name)
qp(Name)
Module:event(init)
Module:event(Parameters)
Module:event(terminate)
{io,Eval,Data}
PING
PONG
N2O
{client,Data}
{server,Data}
{bin,Data}
{binary,_,_,_,_,_,_,_,_,_,_}
{pickle,_,_,_}
{ev,_,_,_,_}
#handler{name,module,config,state}
#ev{module,msg,trigger,name}
#cx{handlers,actions,req,module,lang,path,
session,params,form,state}
#element{}
#action{}
#wire{?ACTION}
#api{?ACTION,name,tag,delegate}
#event{?ACTION,type,postback, delegate}
#alert{?ACTION,text}
#confirm{?ACTION,text,postback,delegate}
#jq{?ACTION,property,method,args,right,format="~s"}
#transfer{?ACTION,state,events}
area,audio,blockquote,button,canvas,checkbox,
col,colgroup,color,command,date,datetime,
datetime_local,del,details,dropdown,dtl,
email,embed,fieldset,file,form,hidden,html,
iframe,image,input,input_button,input_image,
input_time,ins,keygen,label,legend,li,link,
list,literal,map,menu,meta,meta_base,meta_link,
meter,month,number,object,output,panel,param,
password,progress,q,radio,radiogroup,range,reset,
script,search,select,source,style,submit,
summary,table,td,tel,textarea,textbox,th,time,
tr,track,url,video,week
KVS provides a simple database conectivity for various database backends. It allows you to store linked lists and to make any record foldable. KVS doesn't provide consistency guarantees besides capabilities provided by its backends. This framework is used in two servers: chain replication database cr; and feeds server. It is also a companion storage framework for N2O.
delete(Table,Key)
remove(Table,Key)
get(Table,Key)
index(Table,K,V)
next_id(Table,DX)
join(Node)
count(Table)
add(Record)
all(Table)
put(Record)
link(Record)
change_storage(Table,Type)
start()
stop()
destroy()
version()
dir()
entries(Feed,Type,Count)
fs
kai
mnesia
redis
riak
sql
#id_seq{thing,id}
#container{id,top,count}
#iterator{id,version,container,
feed_id,prev,next,feeds,etc}
#interval{left,right,name}
#log{?CONTAINER,name,acc}
#operation{?ITERATOR(log),body,name,status}
#kvs{mod,cx}
#schema{name,tables}
#table{name,container,fields,keys,
copy_type,columns,order_by}
#column{name,type,key,ro,transform}
#query{body,types,values,next_ph_num}
#group{?ITERATOR(feed,true),name,description,scope,
creator,created,owner,count,entries_count}
#subscription{key,who,whom,what,how,date,note}
#user{?ITERATOR(feed,true),email,username,
password,display_name,
register_date,tokens,avatar,
names,surnames,birth,sex,
date,status,zone,type }
#feed{?CONTAINER, aclver}
#entry{?ITERATOR(feed),entry_id,from,to,
title,description,created,hidden,
access,shared,starred,deleted,
media,type}
#comment{?ITERATOR(feed),comment_id,entry_id,
content,from,created,media,parent}
#access{?ITERATOR(acl),entry_id,acl_id,
accessor,action}