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 8–Nov 15 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/15/2026, 6:01:32 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

10 sources
A subproject of oK worth drawing attention to is iKe, a livecoding environment which makes it possible to write interactive graphical programs in K and easily share them: https://github.com/JohnEarnest/ok/tree/gh-pages/ike For example, recently I wrote this program which generates abstract art every time you press a key: http://johnearnest.github.io/ok/ike/ike.html?gist=e47433cfb3... Many other demos are available from within iKe itself.
In OK: An open-source interpreter for the K5 programming language
There is a lot of material on kdb+ on kx's website (http://code.kx.com/wiki/Tutorials), Q for Mortals (http://code.kx.com/wiki/JB:QforMortals2/contents) being the best introductory book. Also some good resources in this Quora: https://www.quora.com/What-are-the-best-resources-to-learn-q... And if your interest is in the k language more than kdb+/q, then I have found the docs in John Earnest's ('RodgerTheGreat) oK interpreter a succinct, example-focused introduction: https://github.com/JohnEarnest/ok/blob/gh-pages/docs/Manual.... Plus using his browser-based REPL (http://johnearnest.github.io/ok/index.html) may lower the barriers to entry, and iKe (http://johnearnest.github.io/ok/ike/ike.html) is great for experimentation...http://johnearnest.github.io/ok/ike/ike.html?gist=9c5f43baa4...
In Data Analysis with Vector Functional Programming [video]
I while ago I wrote a simple Hangman in K, a cousin of J. 6 fairly simple SLoC, and there's still some room for golfing it: d: ("aardvark";"apple";"peanut";"etc"); / dictionary w: d[*1?#d]; / pick a word c: {|/w=/:x}; / correctly guessed b: {{$[x 0;x 1;"_"]}'+(c[x];w)}; / word with blanks p: {`0:" > ";*0:`}; / prompt for a letter {~&/c[x]}{`0:b[x]; x,p[]}/"__"; `0:w,"\n"; https://github.com/JohnEarnest/ok/blob/gh-pages/examples/han...
In Show HN: Hangman in 3 lines of Python

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.