HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
janet-lang
janet
C2019–2026
janet-lang / janet

janet

A dynamic language and bytecode vm

28Distinct people
33Mentions
0Explicit recommenders
4.5KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

A dynamic language and bytecode vm

GitHub

Where it is used

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

What people are saying

No recommendation phrase was found in the indexed comments.

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

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 5:04:57 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 year33 dated mentions

Observed mentions: 2019-02-15 17:00:27 UTC to 2026-09-10 13:16:24 UTC.

02462019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 4 mentions; 3 submissions, 1 comments20192020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 7 mentions; 4 submissions, 3 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 7 mentions; 2 submissions, 5 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments20222023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 2 mentions; 1 submissions, 1 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 4 mentions; 1 submissions, 3 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 6 mentions; 3 submissions, 3 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
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC431
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC743
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC725
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC303
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC211
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC000
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC413
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC633

From the project README

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

Read the project’s introduction
Janet is a programming language for system scripting, expressive automation, and extending programs written in C or C++ with user scripting capabilities. Janet makes a good system scripting language, or a language to embed in other programs. It's like Lua and GNU Guile in that regard. It has more built-in functionality and a richer core language than Lua, but smaller than GNU Guile or Python. However, it is much easier to embed and port than Python or Guile. There is a REPL for trying out the language, as well as the ability to run script files. This client program is separate from the core runtime, so Janet can be embedded in other programs. Try Janet in your browser at https://janet-lang.org. Examples See the examples directory for all provided example programs. Game of Life # John Conway's Game of Life (def- window (seq [x :range [-1 2] y :range [-1 2] :when (not (and (zero? x) (zero? y)))] [x y])) (defn- neighbors [[x y]] (map (fn [[x1 y1]] [(+ x x1) (+ y y1)]) window)) (defn tick "Get the next state in the Game Of Life." [state] (def cell-set (frequencies state)) (def neighbor-set (frequencies (mapcat neighbors state))) (seq [coord :keys neighbor-set :let [count (get neighbor-set coord)] :when (or (= count 3) (and (get cell-set coord) (= count 2)))] coord)) (defn draw "Draw cells in the game of life from (x1, y1) to (x2, y2)" [state x1 y1 x2 y2] (def cellset @{}) (each cell state (put cellset cell true)) (loop [x :range [x1 (+ 1 x2)] :after (print) y :range [y1 (+ 1 y2)]] (file/write stdout (if (get cellset [x y]) "X " ". "))) (print)) # Print the first 20 generations of a glider (var *state* '[(0 0) (-1 0) (1 0) (1 1) (0 2)]) (for i 0 20 (print "generation " i) (draw *state* -7 -7 7 7) (set *state* (tick *state*))) TCP Echo Server # A simple TCP echo server using the built-in socket networking and event loop. (defn handler "Simple handler for connections." [stream] (defer (:close stream) (def id (gensym)) (def b @"") (print "Connection " id "!") (while (:read stream 1024 b) (printf " %v -> %v" id b) (:write stream b) (buffer/clear b)) (printf "Done %v!" id) (ev/sleep 0.5))) (net/server "127.0.0.1" "8000" handler) Windows FFI Hello, World! # Use the FFI to popup a Windows message box - no C required (ffi/context "user32.dll") (ffi/defbind MessageBoxA :int [w :ptr text :string cap :string typ :int]) (MessageBoxA nil "Hello, World!" "Test" 0) Language Features 600+ functions and macros in the core library Built-in socket networking, threading, subprocesses, and file system functions. Parsing Expression Grammars (PEG) engine as a more robust Regex alternative Macros and compile-time computation Per-thread event loop for efficient IO (epoll/IOCP/kqueue) First-class green threads (continuations) as well as OS threads Erlang-style supervision trees that integrate with the event loop First-class closures Garbage collection Distributed as janet.c and janet.h for embedding into a larger program. Python-style generators (implemented as a plain macro) Mutable and immutable arrays (array/tuple) Mutable and immutable hashtables (table/struct) Mutable and immutable strings (buffer/string) Tail recursion Interface with C functions and dynamically load plugins ("natives"). Built-in C FFI for when the native bindings are too much work REPL development with debugger and inspectable runtime Documentation For a quick tutorial, see the introduction for more details. For the full API for all functions in the core library, see the core API doc. Documentation is also available locally in the REPL. Use the (doc symbol-name) macro to get API documentation for symbols in the core library. For example, (doc apply) shows documentation for the apply function. To get a list of all bindings in the default environment, use the (all-bindings) function. You can also use the (doc) macro with no arguments if you are in the REPL to show bound symbols. Source You can get the source on GitHub or SourceHut. While the GitHub repo is the official repo, the SourceHut mirror is actively maintained. Spork and JPM Spork and JPM are two companion projects to Janet. They are optional, especially in an embedding use case. Spork is a collection of common utility modules, and several packaged scripts like janet-format for code formatting, janet-netrepl for a socket-based REPL, and janet-pm for a comprehensive Janet project manager tool. The modules in spork are less stable than the interfaces in core Janet, although we try to prevent breaking changes to existing modules, with a preference to add new modules and functions. Spork requires a C compiler to build and install various extenstion components such as miniz and JSON utilities. Many spork sub-modules, for example spork/path, are independent and can be manually vendored in programmer projects without fully installing spork. When install Spork, scripts will be installed to $JANET_PATH/bin/ on POSIX systems by default. This likely needs to be added to the path to use these scripts. JPM is the older, more opinionated, project manager tool, which has it's pros and cons. It does not require a C compiler to build and install, but is less flexible and is not receiving many changes and improvements going forward. It may also be harder to configure correctly on new systems. In that sense, it may be more stable. JPM will install to /usr/local/bin/ on posix systems by default, which may or may not be on your PATH. Building When building from source, for stability, please use the latest tagged release. For example, run git checkout $(git describe --tags --abbrev=0) after cloning but before building. For the latest development, build directly on the master branch. The master branch is not-necessarily stable as most Janet development happens directly on the master branch. macOS and Unix-like The Makefile is non-portable and
Read the full README on GitHub

What Hacker News says

33 sources
I learned it mostly just by reading through the official documentation[0], but also by looking at code examples in the test suite of the compiler itself at janet-lang/janet[1], the official contrib library at janet-lang/spork[2], and hanging out in the community chatroom on gitter[3]. Recently, one of the veterans in the community published an online beginner-focused book called "Janet for Mortals" that I wholeheartedly recommend: https://janet.guide Aside from that, the community and ecosystem around Janet is still very much developing. I don't know of any really good tutorials on YouTube, for example, and while I know of a blog or two there aren't many. So there's totally a niche for someone to create new content, if that's something you're interested in doing. [0] https://janet-lang.org/docs/index.html [1] https://github.com/janet-lang
Read the rest
In Clojure is a product design tool (2015)
My main workstation is too a Raptor Power9 running Void since November 2019, and I’m very happy with it although as the article mentions, “My experience with firmware is that open source does not mean necessarily better, rather the opposite”. OpenBMC (the firmware for the little ARM-based embedded computer that boots the big one) has a number of rough edges. From time to time I submit patches to software to make it work (or work better) on this machine, last week it was these two trivial ones: https://github.com/ciao-lang/ciao/pull/45 https://github.com/janet-lang/janet/pull/915 Typically that’s all that’s needed, in some cases it’s just more of it: https://github.com/oneapi-src/oneDNN/pull/767 But for most things, since it’s Linux, it’s just those small changes: (one of my customers runs the software I write on AIX and that’s a little mo
Read the rest
re work) https://github.com/IntelRealSense/librealsense/pull/5586 https://sourceforge.net/p/speed-dreams/tickets/1022/ For Rust programs, many packages used i8 for C strings (to interface with OpenGL for instance) which broke when running on ppc64 and had to be changed to c_char, but that’s not a problem these days, I guess because many people now test on ARM. https://github.com/femtovg/femtovg/pull/5 Before Power10 was done, IBM actually asked us Raptor users about proposals for useful machine code instructions to add to it. I replied that I’d like to have hardware UTF-8 de-/encoding but they wanted a more detailed proposal and I never got around to write it. I’m not even sure that this would be worthwhile, but I see UTF-8 de-/encoding everywhere in the code I write and would like it to approach memory read/write speeds. I was very disappointed to learn that they had gone more proprietary with Power10 so I would not have been able to use those instructions anyway. What a pity! This machine still covers my needs so I’m not planning to replace it any time soon.
In Keeping POWER relevant in the open source world

Showing the 15 most recent of 33 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.