Jennifer
Jennifer is a small, experimental, interpreted programming language written in (Tiny)Go and ships as two binaries:
jennifer- standard Go build, full host-feature surface. This is the default binary you install and reach for.jennifer-tiny- TinyGo build, smaller and embeddable. Missingos/execand the network stack (TinyGo runtime gaps); calls into those surfaces return a friendly runtime error pointing back atjennifer. Use this variant when binary size or embeddability matters (embedded systems, minimal containers, small-footprint scripting hosts).
But small is not bare. Jennifer is batteries-included: a broad standard
library and a growing set of distributable modules cover what real programs
actually need, so you build genuine tools, not toys. Text handling has full
regular expressions; structured data flows through
JSON; email is a complete stack -
SMTP to send, POP3 and
IMAP to receive; in-memory data stores come through
Redis and memcached clients; the
web runs from an ergonomic REST client to turnkey
integrations such as Gotify push notifications; and
lightweight concurrency is built into the language
via spawn and the task library. Browse the full
library catalog and
module catalog - both grow with every release.
It is also a natural fit for teaching and learning: an interactive
REPL, an easy-to-read grammar,
and token and AST dumps that make it ideal for
mastering language design, plus a built-in linter and
profiler and full
test support. Its
strict, explicit design - conditions must be bool,
conversions are spelled out, names never shadow, and errors are positioned -
surfaces a mistake as a clear message instead of a silent surprise, so a
learner sees exactly what went wrong.
Source files use the .j extension. Whitespace is not significant
anywhere; statements end with ;.
use io;
use time;
def start as time.Time init time.now();
io.printf("hello, world\n");
def gap as time.Duration init time.sub(time.now(), $start);
io.printf("ran for %d ms\n", time.milliseconds($gap));
Write Jennifer with your editor and an AI assistant
Syntax highlighting ships in
editors/ (a
Vim / Neovim drop-in, a TextMate grammar for VS Code / Sublime / Zed, a
highlight.js definition). And because Jennifer is new, we ship
JENNIFER.md:
drop it into your project and point an AI coding assistant at it (“we
code in Jennifer, see JENNIFER.md, let’s go”) so it writes correct .j
from the start. See Editor & AI support.
What’s in this site
- Getting started - install the interpreter and run your first program.
- Editor & AI support - highlighting and
the drop-in
JENNIFER.mdfor AI-assisted coding. - Language reference - syntax, types, methods, control flow, imports, style.
- Libraries - per-library reference plus an alphabetical cheatsheet of every builtin.
- Modules - the Jennifer-coded, importable
module ecosystem (
import "name.j";): formats, mail, stores, web, and protocol clients, each with its own reference page. - Technical reference - implementation details for the lexer, parser, interpreter, and CLI.
- Project - milestones, design stances, glossary.
Status
Pre-1.0. The major version stays at 0.x.y while the language is
still finding its shape; breaking changes can happen at milestone
boundaries and are called out in
docs/milestones.md. Once Jennifer reaches 1.0.0,
semver applies and breaking changes need a major bump.
Source
Source, issues, and pull requests live at https://github.com/jennifer-language/jennifer.
License: LGPL-3.0-only.
Manual
Download the whole manual as a single PDF. The entire documentation in one file, regenerated from these pages on every build - handy for reading or searching offline.