HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
JohnEarnest
ok
JavaScript2015–2026
JohnEarnest / ok

ok

An open-source interpreter for the K5 programming language.

37Distinct people
89Mentions
3Explicit recommenders
653GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

An open-source interpreter for the K5 programming language.

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

ngn/k is a performant FOSS implementation of k6, but it has many constraints and limitations that may make composing large programs difficult. It may be the best dialect for…

RodgerTheGreat used a recommendation phrase. 3 indexed comments match. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year89 dated mentions

Observed mentions: 2015-02-13 14:20:08 UTC to 2026-07-29 07:59:27 UTC.

0510152015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 16 mentions; 2 submissions, 14 comments20152016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 10 mentions; 1 submissions, 9 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 8 mentions; 0 submissions, 8 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 6 mentions; 0 submissions, 6 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 11 mentions; 3 submissions, 8 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 10 mentions; 2 submissions, 8 comments20202021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 7 mentions; 0 submissions, 7 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 6 mentions; 1 submissions, 5 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 6 mentions; 3 submissions, 3 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 4 mentions; 2 submissions, 2 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC16214
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC1019
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC808
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC606
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC1138
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC1028
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC404
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC707
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC615
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC633
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC101
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC422

From the project README

An excerpt from the repository, fetched Nov 13, 2026.

Read the project’s introduction
oK oK is a toy interpreter for a dialect of the K programming language which aims to be an implementation of K5, the still-evolving bleeding edge version of the language. Expect oK to be buggy, incomplete and occasionally flat-out wrong, but slowly improving over time. Read the oK Manual for an overview of oK's operators and syntax. If you are interested in learning more about K, consider downloading the free version of kdb from Kx Systems, the fine makers of K. Alternatively, Kona is an open-source reimplementation of K3/K4. oK does not intend to be particularly fast or suitable for any practical purpose beyond learning, instead emphasizing simplicity of implementation. JavaScript was chosen as an implementation language because it is familar to many programmers and has first-class functions. Trying oK The easiest way to run oK is using the Browser-based REPL. This REPL features a few special commands which can be issued at the beginning of a line: \\ (while entering a multiline expression) cancel this expression. \e toggle the scratchpad editor pane. This editor's content is persisted via localstorage (in case your browser crashes or is closed accidentally). \r run the contents of the editor pane. Alternately, press shift+enter with the editor focused. \c clear the output log. \t time executing the remainder of the line. \f list all presently defined functions. \v list all presently defined variables. \u generates a code url from the remainder of the line, as described below. oK provides several numbered IO verbs: dyadic 0: takes a symbol or string as its left argument and writes the right argument to that destination as text. The right argument can be a symbol, a string, or a list of symbols or strings. In the browser-based REPL the symbol is ignored and output is always sent to the console. In the command-line REPL output is sent to a file as specified by the left argument, or to stdout if the left argument is empty. monadic 0: reads the content of a file or a URL. In the browser-based REPL it takes a string as its right argument and performs a synchronous HTTP request to that URL. The result will be a tuple containing the HTTP status code followed by the response, if any. You can use this in conjunction with pastebins to load code from elsewhere or access RESTful web APIs. Note that most web browsers restrict cross-site HTTP requests from javascript under the same-origin policy- you'll need a server which responds with an Access-Control-Allow-Origin header. GitHub gists will do: url: "https://gist.githubusercontent.com/anonymous/cc0ef05c00940044eb0a/raw/" "https://gist.githubusercontent.com/anonymous/cc0ef05c00940044eb0a/raw/" 0:url (200 "/ generate a times table\nt*/:t:!10\n") .*|0:url (0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 0 2 4 6 8 10 12 14 16 18 0 3 6 9 12 15 18 21 24 27 0 4 8 12 16 20 24 28 32 36 0 5 10 15 20 25 30 35 40 45 0 6 12 18 24 30 36 42 48 54 0 7 14 21 28 35 42 49 56 63 0 8 16 24 32 40 48 56 64 72 0 9 18 27 36 45 54 63 72 81) In the command-line REPL 0: reads a file as text. The right argument can be a symbol or a string specifying the file path. If the path is to a directory, 0: returns its listing. If the path is empty and oK is not running interactively, 0: tries to read text from stdin until it encounters a '\n'. monadic 1: works just like monadic 0: except it expects the response to be JSON rather than arbitrary text, and it attempts to parse it into a K data structure you can then manipulate: url:"http://api.openweathermap.org/data/2.5/weather?q=London,uk" "http://api.openweathermap.org/data/2.5/weather?q=London,uk" t:1:url (200;[coord:[lon:-0.13;lat:51.51];sys:[type:1;id:5091;message:0.0224;country:"GB";sunrise:1425709902;sunset:1425750674];weather:,[id:800;main:"Clear";description:"Sky is Clear";icon:"01d"];base:"cmc stations";main:[temp:288.11;pressure:1024;humidity:44;temp_min:286.85;temp_max:289.82];wind:[speed:6.2;deg:230];clouds:[all:0];dt:1425736003;id:2643743;name:"London";cod:200]) t[1;`weather;0;`description] "Sky is Clear" monadic 5: returns a printable string representation of the right argument, as in K3. Sometimes this can be useful for debugging: 5: 1 2 3 "1 2 3" 5:"foo" "\"foo\"" 5: {x+2*y} "{[x;y]x+2*y}" If you visit the page with a ?run= URL parameter, the remainder of the URL will be URI decoded and executed. The \u command can create a link for you based on an expression. You can combine this feature with monadic 0: to run larger programs: \u 1+2 oK code url: http://johnearnest.github.io/ok/index.html?run=%201%2B2 \u .*|0:"https://gist.githubusercontent.com/anonymous/cc0ef05c00940044eb0a/raw/" oK code url: http://johnearnest.github.io/ok/index.html?run=%20.*%7C0%3A%22https%3A%2F%2Fgist.githubusercontent.com%2Fanonymous%2Fcc0ef05c00940044eb0a%2Fraw%2F%22 Command Line Mode Alternatively, you can run oK via the command line with Node.js. test.js runs a series of automated tests: je@indigo$ node test.js You can also try out oK from the included REPL. Note that at the time of writing, the release version of Node.js does not portably support blocking reads from stdin- the REPL has been tested with Node v0.11.14 on OSX. je@indigo$ node repl.js oK v0.1 +/4 5 6 15 1 2 3+2 5 length error. a:"some text" "some text" "t"=a 0 0 0 0 0 1 0 0 1 This REPL is very simplistic compared to the CLI provided in a complete K interpreter and lacks interactive debugging facilities. When you're done, type \\ or press Ctrl+D to exit. If you supply a filename as an argument to the REPL, it will instead execute that file: je@indigo$ node repl.js examples/hangman.k _____ > p _pp__ > e _pp_e > a app_e > l apple Mobile On mobile devices like cell phones, try oK Mobile! Tilting your device horizontally will provide a QWERTY touch-keyboard, and a vertical orientation will provide a calculator-like keypad which provides access to all K verbs and adverbs
Read the full README on GitHub

What Hacker News says

89 sources
re APL: BQN is a new take on APL w/ high performance implementation https://mlochbaum.github.io/BQN/ Dyalog APL is a well supported proprietary APL implementation https://www.dyalog.com re open source k implementations: there are many by now here is a current non-exhaustive list grouped by k dialect they orbit (to my understanding) k9 ktye (Go w/ Go, wasm, C targets) https://github.com/ktye/i k6 ngn/growler (C): https://codeberg.org/growler/k oK (JavaScript): https://github.com/JohnEarnest/ok kiwi (Zig): https://github.com/kiwi-array-lang/kiwi k3 kona (C): https://github.com/kevinlawler/kona gk (C): https://github.com/cmh25/gk ksharp (C#): https://github.com/ERufian/ksharp k-like goal (Go): https://codeberg.org/anaseto/goal klongpy (Python) https://github.com/briangu/klongpy I'm working on kiwi. kiwi has a focus on supporting Apple Silico
Read the rest
n and can make use of Apple Silicon GPU (via MLX and Metal) as well as the Accelerate framework to speed up some workloads. kiwi also comes with companion apps for iPhone, iPad, Mac and Apple watch in case anyone wants to run k on a watch: https://kiwilang.com
In Thinking in an array language (2022)
RodgerTheGreat·Nov 12, 2025Recommendation phrase
ngn/k is a performant FOSS implementation of k6, but it has many constraints and limitations that may make composing large programs difficult. It may be the best dialect for tinkering and learning the language. https://codeberg.org/ngn/k oK is a slow browser-based FOSS implementation of k6, with fun bells and whistles like "iKe", a visual livecoding environment. ngn/k and oK have diverged a bit, but are largely similar: https://github.com/JohnEarnest/ok Q is a K-derived language built into kdb+; this is probably the most commercially viable dialect to learn, with the best educational materials (I recommend Nick Psaris' Q Tips), but it is proprietary, with (last I checked) free licenses available for personal use. If you've seen Decker you may also have been exposed to Lil, which is similar in many ways to Q. It is more verbose and less ex
Read the rest
pressive than Q or K, but I've generally heard people say they find it comparatively accessible: http://beyondloom.com/tools/trylil.html
In Array-programming the Mandelbrot set
there are at least three reasonably comprehensive open-source k implementations: https://github.com/kevinlawler/kona (k3) https://github.com/JohnEarnest/ok (k6, js-based) https://codeberg.org/ngn/k (k6, c-based) even today, many k programmers learn from the k2 reference manual. k2/k3 are extremely similar: http://web.archive.org/web/20050504070651/http://www.kx.com/... oK has a briefer manual which describes k5/k6: https://github.com/JohnEarnest/ok/blob/gh-pages/docs/Manual....
In k on pdp11
> You need to do this for any language. Fair, but if your language keeps growing, this task is never done. > Not sure what this is referring to. Do you have an example? Array programmers sometimes avoid abstractions because they prefer "idioms" like these[1]. So rather than curate a library of words like: barchart: {x>\:!|/x} and have the programmer use the word "barchart", they instead prefer to use the definition itself. The word "barchart" has a specific meaning (here, an ascii "bar chart" of 0s and 1s, showing the relative sizes of the values of input array x), but "{x>\:!|/x}" might be useful for more than just bar charts. This idiom contains smaller idioms like "count til max" (!|/) which in turn contains "max" (|/). Being able to see the code makes it easier to explore and tweak to your specific needs. But more importantly, th
Read the rest
ere are no "official" names for concepts like "count til max". That's just my personal name for it. A python programmer would call it "range". You could come up with your own name for (!|/) that makes perfect sense to you. But that name will probably be longer than its definition, and less flexible. [1] https://github.com/JohnEarnest/ok/blob/gh-pages/examples/idi...
In Why Lisp Syntax Works
check out oK[0] by John Earnest, who is the author of the content of this post. it has a well-written manual and is a great jumping off point. the source is written in ~1000 lines of js. so you can look at how each primitive is implemented. there is a k-enthusiast element.io server[1] where you can ask any question you like. folks are friendly! EDIT: another commenter shared most of this info. oops :-) i'll add as well ngn-k browser repl[2] which has some docs and a fuller feature-set than oK. this is probably the most-used open source k right now. the author is active in the above element server, and still patches bugs and makes updates. [0] https://github.com/JohnEarnest/ok [1] https://matrix.to/#/#aplfarm-k:matrix.org [2] https://ngn.codeberg.page/k/#
In Animated Unknown Pleasures in 3 lines of K (2015)
I have tried to learn J, it seems to be one of the most well documented. And Ike itself is not a bad environment to play around with K https://johnearnest.github.io/ok/ike/ike.html It has a repl as well in: https://johnearnest.github.io/ok/ you can find source here: https://github.com/JohnEarnest/ok and manual here: https://github.com/JohnEarnest/ok/blob/gh-pages/docs/Manual.... If this is the entirety of K - https://kparc.com/k.txt it does fit on a single full-screen page.
In Animated Unknown Pleasures in 3 lines of K (2015)

Showing the 15 most recent of 89 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.