<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/janet-1-42-0-ehneumknr" -->

---
title: Janet 1.42.0 | daily.dev
description: Janet 1.42.0 has been released, bringing a large batch of bug fixes and extensive documentation improvements. Notable fixes include a GC bug that could collect...
canonical: https://daily.dev/posts/janet-1-42-0-ehneumknr
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Janet 1.42.0 | daily.dev
og:description: Janet 1.42.0 has been released, bringing a large batch of bug fixes and extensive documentation improvements. Notable fixes include a GC bug that could collect...
og:url: https://daily.dev/posts/janet-1-42-0-ehneumknr
og:image: https://api.daily.dev/og/posts/EHNeUmkNr.png
og:image:alt: Janet 1.42.0
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Janet 1.42.0

**[Lobsters](https://daily.dev/sources/lobsters)** · 4 min read · 5 upvotes · 0 comments

## Summary

Janet 1.42.0 has been released, bringing a large batch of bug fixes and extensive documentation improvements. Notable fixes include a GC bug that could collect an active fiber during nested janet_continue calls, stale fiber stack pointers across realloc, a double-free in the ev module, and a fix so janet_channel_make_threaded correctly returns a threaded channel. The release also adds shell completions for bash, zsh, and fish, new OSS-Fuzz fuzzer targets, macro hygiene tweaks, and dozens of docstring clarity and test coverage improvements led largely by contributor sogaiu. Ten new contributors made their first submissions in this release.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://github.com/janet-lang/janet/releases/tag/v1.42.0>

## Questions this post answers

### What was fixed in Janet 1.42.0 related to garbage collection and fibers?

Janet 1.42.0 fixes a bug where the garbage collector could collect an active fiber during a nested janet_continue call, and separately fixes stale fiber stack pointers that could occur across a realloc. The release also fixes a double free in the ev (event loop) module and ensures streams are properly unregistered from ev upon closure.

_Track fiber and concurrency fixes like these on daily.dev before they bite you in production._

### Does janet_channel_make_threaded work correctly in Janet before 1.42.0?

No, prior to Janet 1.42.0 the janet_channel_make_threaded function had a bug where it failed to return a threaded channel as expected. This was fixed in the 1.42.0 release, alongside a fix for a missing :symbolmap keyword in the disasm function.

_Follow language-level bugfix releases like this on daily.dev when picking dependable tooling._

### What shells does the Janet command line tool support completions for?

Janet added shell completions for bash, zsh, and fish as of version 1.42.0. This was contributed alongside a large set of other fixes including plan9 port maintenance and new OSS-Fuzz fuzzer targets for unmarshal, dobytes, and the compile process.

_daily.dev surfaces tooling updates like shell completions for languages you rely on daily._

## Community take

How the wider developer community reacted, aggregated from 2 discussions and 16 comments across lobsters, hackernews (as of 2026-09-01).

**TL;DR:** Long-time users express genuine enthusiasm for Janet's compile-time/runtime unification, single-binary distribution, and PEGs, while a recurring thread of frustration centers on the state of documentation and packaging tooling despite this release's docs improvements.

**Sentiment:** 60% positive · 35% mixed · 5% skeptical

**The case for**

- Enjoyed the lack of distinction between compile-time and run-time code, enabling bundler-like resource embedding.
- Appreciated Janet's single-binary distribution compared to other languages' obtuse install processes.
- Found PEGs (parsing expression grammars) genuinely fun and powerful to use.
- One commenter related to a subtle GC bug fix, noting similar issues in their own VM work.

**The pushback**

- Documentation was called some of the worst encountered across any language ecosystem, scattered across multiple partial sources.
- Confusion over migrating from jpm to the newer janet-pm/spork tooling, which is described as under-documented.
- A user hit a native module version-mismatch build error shortly after upgrading via Homebrew.
- Some pushback on changelog entries being a long list of docstring-only PRs described as unclear syntax changes, plus concern about unrelated 'rider' changes bundled into doc PRs.

**By community**

- lobsters (mixed): Enthusiastic long-time users praise core language design and PEGs, but a detailed critique of documentation quality and packaging tooling confusion runs through much of the thread.
- hackernews (mixed): Minimal engagement, with just a passing question about how Janet compares to another tool.

**Hottest debate:** Whether the changelog's long run of docstring-only PRs represents unclear communication or simply good release-note hygiene for documentation-only changes.

**Open questions**

- How does Janet compare to Jolt and when should one be chosen over the other?
- Why doesn't native module recompilation happen automatically after a Janet version upgrade?

**Highlights**

> I've been doing some Janet programming for single-user projects at work, as I'm a big [Ian Henry](https://janet.guide) fan and have been wanting to learn a Lisp for a while. I previously bounced off several due to what seem to me to be obtuse installation processes—Janet is a nice single binary. I've had a lot of fun with it! In particular, [PEGs](https://janet.guide/pegular-expressions/) are super awesome. However, it must be said that the documentation is the worst I've ever seen across any language ecosystem. I've been making my way through with a combination of Janet for Mortals, the [official website](https://janet-lang.org/docs/index.html), and [JanetDocs](https://janetdocs.org) but it is a slog. I'm constantly learning about more idiomatic ways of doing things that are written down in only one random place, or running into version issues, etc. Also I wish there was an LSP but that's a whole other can of worms. In any case, with that rant out of the way, I'm going to get back to programming in Janet. Until I switch to [Steel](https://github.com/mattwparas/steel) or [Clojure](https://clojure.org), maybe.
> — [FIGBERT on lobsters · 1 points, 1 comments](https://lobste.rs/s/jbgnwk/janet_1_42_0#c_fvnart)

> Hah! Feeling silly about the LSP comment, as I clicked on that link and it was already in my history. Wonder why I didn't get it up and running. I use Helix. On the version issues, I'm having some right now actually. I found a bug in a PEG I wrote, so I tweaked it and have attempted to recompile. I also updated Janet via `brew` today. Now, when I run `jpm build`, I see: ``` /opt/homebrew/lib/janet/jpm/commands.janet:168:1: compile warning (normal): binding rule is shadowing a macro generating executable c source build/slurp-to-edi.c from init.janet... error: could not load native /opt/homebrew/lib/janet/spork/json.so: config mismatch - host 1.42.0(0001) vs. module 1.41.2(0000) - native needs to be recompiled! error: build fail   in pdag [/opt/homebrew/lib/janet/jpm/dagbuild.janet] (tail call) on line 79, column 23   in run-main [boot.janet] on line 4949, column 16   in cli-main [boot.janet] on line 5183, column 17 ``` The first line is in orange and is annoying but doesn't appear to break anything. I am running `jpm update-installed` in order to try and get Spork recompiled (which seems to me should just happen automatically, but fine) and it fails while trying to update `jpm.jdn`, after updating Spork. Still doesn't build. Running the file via `janet` directly fails with the same error.
> — [FIGBERT on lobsters · 1 points](https://lobste.rs/s/jbgnwk/janet_1_42_0#c_sfjz5g)

> I think those refer to documentation improvements, not syntax changes. (See [here](https://github.com/janet-lang/janet/pull/1815/changes "Janet PR Improve docstrings of filter and friends").) In general, though, I defend trying to write commit messages suitable for generating release notes. But perhaps this is an example of that not being a great idea. edit: what's a bit triggering is that I was just skimming through the PR I linked and I think it's making more changes. I don't like "rider" changes :(
> — [koala on lobsters · 1 points, 1 comments](https://lobste.rs/s/jbgnwk/janet_1_42_0#c_ee05ux)

> Note that a lot of the nice libraries that used to be separate are now part of the `spork` library collection, e.g. https://janet-lang.org/spork/api/sh-dsl.html instead of the `sh` library the older Janet book recommends in https://janet.guide/scripting/. There's also a spork version of the `cmd` library that chapter recommends (forget the exact name). (Oh, you should look at https://janet.guide/ if you haven't yet, just remember that some library references are out of date, and the newer versions have slightly different APIs. Asking an AI might be a good way to sort it out) For packaging, they are also trying to migrate from `jpm` to `janet-pm` that's also a part of spork, https://janet-lang.org/spork/api/pm.html. It's woefully under-documented, but fortunately spork now has most of the stuff I was interested in. Installing spork itself is documented in https://github.com/janet-lang/spork#installation. Installing spork is also a prerequisite for using the new package manager :).
> — [ilyagr on lobsters · 1 points, 2 comments](https://lobste.rs/s/jbgnwk/janet_1_42_0#c_ogovqd)

> Congratulations on your release! > Fix GC collecting active fiber during nested `janet_continue` > If GC triggers inside the inner fiber's execution, the inner fiber is not in any GC root set and can be collected, including its stack memory, while actively running. It's always a little reassuring when I discover I'm not the only person being plagued by this sort of issue. During recent code reviews, I discovered an eerily similar problem where I couldn't nest `import` calls because doing that would hide virtual machine instances from the GC. These waters really are full of sharks...
> — [matheusmoreira on lobsters · 1 points](https://lobste.rs/s/jbgnwk/janet_1_42_0#c_m8an6i)

**Source threads**

- [lobsters](https://lobste.rs/s/jbgnwk/janet_1_42_0) · 46 points · 15 comments
- [hackernews](https://news.ycombinator.com/item?id=49516341) · 5 points · 1 comments

## Similar posts on daily.dev

- [Crystal 1.21.0 is released\!](https://daily.dev/posts/crystal-1-21-0-is-released--rdiw9bdey) · Crystal · 19 upvotes · 0 comments

---

Tags: [#open-source](https://daily.dev/tags/open-source)

[View this post on daily.dev](https://daily.dev/posts/janet-1-42-0-ehneumknr)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Janet 1.42.0","url":"https://daily.dev/posts/janet-1-42-0-ehneumknr","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/janet-1-42-0-ehneumknr"},"datePublished":"2026-09-01T09:32:51.136Z","dateModified":"2026-09-01T17:33:42.635Z","description":"Janet 1.42.0 has been released, bringing a large batch of bug fixes and extensive documentation improvements. Notable fixes include a GC bug that could collect...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/32e1efd3aa586564bfa5ecf958a1e5f5?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/32e1efd3aa586564bfa5ecf958a1e5f5?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Lobsters","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Lobsters","logo":"https://media.daily.dev/image/upload/s--tl8v_Fku--/f_auto,t_logo/v1698841318/logos/lobste.jpg","url":"https://daily.dev/sources/lobsters"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/janet-1-42-0-ehneumknr","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":3},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"open-source","timeRequired":"PT4M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Lobsters","item":"https://daily.dev/sources/lobsters"},{"@type":"ListItem","position":3,"name":"Janet 1.42.0"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/janet-1-42-0-ehneumknr#faq","mainEntity":[{"@type":"Question","name":"What was fixed in Janet 1.42.0 related to garbage collection and fibers?","acceptedAnswer":{"@type":"Answer","text":"Janet 1.42.0 fixes a bug where the garbage collector could collect an active fiber during a nested janet_continue call, and separately fixes stale fiber stack pointers that could occur across a realloc. The release also fixes a double free in the ev (event loop) module and ensures streams are properly unregistered from ev upon closure. Track fiber and concurrency fixes like these on daily.dev before they bite you in production."}},{"@type":"Question","name":"Does janet_channel_make_threaded work correctly in Janet before 1.42.0?","acceptedAnswer":{"@type":"Answer","text":"No, prior to Janet 1.42.0 the janet_channel_make_threaded function had a bug where it failed to return a threaded channel as expected. This was fixed in the 1.42.0 release, alongside a fix for a missing :symbolmap keyword in the disasm function. Follow language-level bugfix releases like this on daily.dev when picking dependable tooling."}},{"@type":"Question","name":"What shells does the Janet command line tool support completions for?","acceptedAnswer":{"@type":"Answer","text":"Janet added shell completions for bash, zsh, and fish as of version 1.42.0. This was contributed alongside a large set of other fixes including plan9 port maintenance and new OSS-Fuzz fuzzer targets for unmarshal, dobytes, and the compile process. daily.dev surfaces tooling updates like shell completions for languages you rely on daily."}}]}
```

