I expect you are pleasantly surprised by the speed of k9 and by the fact that it all fits in 134,152 bytes! (For comparison the ls program weighs in at 51,888 bytes and can’t even change directory.)

If you’re frustrated by the syntax or terse errors, then you’re not alone. Many have had the same problems, but persevered, and finally came away a power user able to squeeze information from data faster than previously imagined.

Eventually, you’ll realize that this manual isn’t needed and it’s all here...

python:from k import k;k('+',2,3);nodejs:k=require('k').k;k('+',2,3) *ffi:"./a.so"5:`a!"fi" //double a(int x){return 2.3+x;} $k [-p 1024] a.k verb adverb noun : x y f' each char " ab" \l a.k + flip plus [x]f/ over c/ join name ``ab \t:n x - minus minus [x]f\ scan c\ splt int 2 3 \u:n x * first times [y]f':eachprior flt 2 3.4 0w 0n \v % divide f/:eachright g/:over date 2021.06.28 .z.d & where min/and f\:eachleft g\:scan time 12:34:56.789 .z.t | reverse max/or < asc less i/o (*enterprise) class \f > desc more 0: r/w line (N;C)0: list (2;3.4;`c) \fl x = group equal 1: r/w char dict [n:`b;i:2] \fc x ~ not match *2: r/w data func {[a;b]a+b} \fs x ! key key *3: k-ipc set expr :a+b \cd [d] , enlist cat *4: https get ^ sort [f]cut *5: ffi:`f!"ifsIF" # count [f]take _ floor [f]drop $ string parse $[b;t;f] cond ? unique find limit {[p8]l8;g32;c128} @ type [f]at @[x;i;f[;y]] amend table [[]n:`b`c;i:2 3] . value [f]dot .[x;i;f[;y]] dmend utable [[n:`b`c]i:2 3] math: sqrt sqr exp log sin cos div mod bar in bin aggr: count first last min max sum dot avg var [dev med mode ..] sql: select A by B from T where C; update A from T; delete from T where C /comment \trace [:return 'signal if do while] \\exit