Org Babel support for Janet
  • Emacs Lisp 100%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
nik gaffney 9e849604ec
Some checks failed
melpazoid-ob-janet / build (push) Has been cancelled
Oh, yes, it is a very effective fail-safe.
2026-08-03 18:54:25 +08:00
.github/workflows melpazoid 2026-07-21 11:43:14 +08:00
test Oh, yes, it is a very effective fail-safe. 2026-08-03 18:54:25 +08:00
LICENSE I told you not to conjure anything! 2026-07-20 10:51:42 +08:00
ob-janet.el Unclear. I'll get everything, just to be safe. 2026-08-03 14:08:31 +08:00
README.org melpazoid 2026-07-21 11:36:57 +08:00

Introduction

ob-janet provides Org Babel support for the Janet language to enable Janet code blocks in literate Org files.

Installation

Manual Installation

Download ob-janet.el, place it in the load path, and add a require to your init file. It may be necessary to set or customize ob-janet-path and ob-janet-executable if either can't be found by default.

(require 'ob-janet)
(add-to-list 'org-babel-load-languages '(janet . t))

via use-package

(use-package ob-janet
  :after org
  :init
    (setq ob-janet-executable "janet"
          ob-janet-path "/usr/local/lib/janet")
  :config
    (add-to-list 'org-babel-load-languages '(janet . t)))

via straight.el

(use-package ob-janet
  :straight (:host github :repo "zzkt/ob-janet")
  :after org
  :config
  (add-to-list 'org-babel-load-languages '(janet . t)))

Usage

Execute a code block with C-c C-c using the header :results output to capture stdout, or :results value to capture the return value of the block.

(var void 'boundless)
(print "I live in a boundless void.")
(string "The void is " void)
(var void 'boundless)
(print "I live in a boundless void.")
(string "The void is " void)

Variables can be passed from named Org blocks (including tables) or assigned in the header

Name Age
Eleanor 36
Jason 29
Kamilah 31
(each row data
  (print (string "Name: " (row 0) ", Age: " (row 1))))
(print (+ x y))

Header arguments

Header Description Default
:cmd <path> Janet executable or path janet
:results <format> Result format: raw, none, output or value output
:session <name> Session name for persistent eval none
:file <path> Output file path none
:prologue <code> Code to prepend before the body none
:epilogue <code> Code to append after the body none
:debug Show expanded body none

Sessions

Use :session for persistent state (sessions) across code blocks that share the same session name

(var *count* 0)
(defn increment [] (++ *count*) *count*)
(increment)
(increment)
(increment)

Prologue and Epilogue

Use :prologue or :epilogue to include code before or after the main body of the src block.

(def phi^2 (+ phi 1))

File Output

Use :file and a path to write output (or value) to a file

(loop [i :range [1 11]]
  (print i))

see: file:numbers.txt

Debug

Preview expanded code, without evaluation, by adding :debug to the header. The output is the unevaluated code that would be sent to a Janet process.

(+ x 10)
(+ x 10)

Customization

Customize ob-janet settings with the ob-janet customization group, M-x customize-group ob-janet

Variable Description Default
ob-janet-executable Path to Janet executable "janet"
ob-janet-hline-to Replacement for table hlines in Janet "nil"
ob-janet-nil-to Replacement for Janet nil in results 'hline
ob-janet-value-wrapper Template for wrapping value results see: ob-janet.el
ob-janet-output-wrapper Template for wrapping output results see: ob-janet.el

Troubleshooting

Janet not found

Ensure janet is on your PATH, or customize ob-janet-executable to include the full path to the janet executable.

(setq ob-janet-executable "/usr/local/bin/janet")

Modules (or symbols) not found

Modules and libraries are located using the JANET_PATH environment variable. If JANET_PATH is not set, or has been redefined, the variable ob-janet-path can be used to set the correct path.

(setq ob-janet-path "/usr/local/lib/janet/")