<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/opus-is-a-minimal-statically-scoped-lisp-dialect-based-on-the-semantics-of-f-expressions-the-kerne-lp5ia4hzj" -->

---
title: Opus is a minimal, statically-scoped Lisp dialect based...
description: Opus is a minimal, statically-scoped Lisp dialect built on f-expressions from the Kernel language, implemented in Haskell using continuation-passing style and...
canonical: https://daily.dev/posts/opus-is-a-minimal-statically-scoped-lisp-dialect-based-on-the-semantics-of-f-expressions-the-kerne-lp5ia4hzj
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Opus is a minimal, statically-scoped Lisp dialect based on the semantics of f-expressions (the Kernel language) | daily.dev
og:description: Opus is a minimal, statically-scoped Lisp dialect built on f-expressions from the Kernel language, implemented in Haskell using continuation-passing style and...
og:url: https://daily.dev/posts/opus-is-a-minimal-statically-scoped-lisp-dialect-based-on-the-semantics-of-f-expressions-the-kerne-lp5ia4hzj
og:image: https://api.daily.dev/og/posts/LP5ia4hzJ.png
og:image:alt: Opus is a minimal, statically-scoped Lisp dialect based on the semantics of f-expressions (the Kernel language)
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.

# Opus is a minimal, statically-scoped Lisp dialect based on the semantics of f-expressions (the Kernel language)

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

## Summary

Opus is a minimal, statically-scoped Lisp dialect built on f-expressions from the Kernel language, implemented in Haskell using continuation-passing style and compiling to WebAssembly. It unifies functions and macros into a single primitive called an operative ($vau), treats environments as first-class executable values, and derives features like hygienic modules and capability-based sandboxing entirely in user-space rather than through compiler support. It also natively supports proper tail calls and first-class continuations via its CPS interpreter, with build instructions for native, Nix, and WebAssembly targets.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://github.com/yaoshiu/opus>

## Questions this post answers

### What is an f-expression (fexpr) and how does it differ from a regular Lisp function?

An f-expression, or operative, receives its arguments unevaluated and has explicit access to the calling environment, unlike a regular function which evaluates arguments before execution. In the Opus language, a wrapped operative (via the wrap primitive) becomes a function, meaning functions and macros are unified into a single primitive called an operative, created with $vau.

_Explore how daily.dev surfaces deep dives on language design for developers building interpreters and DSLs._

### How can you implement a read-only sandbox in a Lisp-like language without special-casing the interpreter?

A capability-based sandbox can be built by treating variable binding itself as an ordinary operative rather than a hardcoded special form, then removing that binding capability inside a child environment. For example, redefining or removing $define!, raw-root!, and root within a child environment created from root makes that environment effectively read-only, all implemented in user-space code rather than interpreter internals.

_Follow daily.dev for more on language-level security patterns like capability-based sandboxing._

## Similar posts on daily.dev

- [JeffBezanson/femtolisp: a lightweight, robust, scheme-like lisp implementation](https://daily.dev/posts/jeffbezanson-femtolisp-a-lightweight-robust-scheme-like-lisp-implementation-05mm9mqj8) · Hacker News · 0 upvotes · 0 comments
- [Anthropic releases Opus 4.5 with new Chrome and Excel integrations](https://daily.dev/posts/anthropic-releases-opus-4-5-with-new-chrome-and-excel-integrations-o27v4qrok) · TechCrunch · 3 upvotes · 0 comments
- [heol](https://daily.dev/posts/heol-3r84ycl6k) · Lobsters · 0 upvotes · 0 comments
- [GitHub - ThatXliner/rust-but-lisp: Rust but LISP](https://daily.dev/posts/github---thatxliner-rust-but-lisp-rust-but-lisp-jiencdy0y) · Hacker News · 0 upvotes · 0 comments
- [‘Futuristic’ Unison functional language debuts](https://daily.dev/posts/futuristic-unison-functional-language-debuts-ptbhh0vv6) · InfoWorld · 0 upvotes · 0 comments

---

Tags: [#typescript](https://daily.dev/tags/typescript), [#haskell](https://daily.dev/tags/haskell), [#lisp](https://daily.dev/tags/lisp)

[View this post on daily.dev](https://daily.dev/posts/opus-is-a-minimal-statically-scoped-lisp-dialect-based-on-the-semantics-of-f-expressions-the-kerne-lp5ia4hzj)

```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":"Opus is a minimal, statically-scoped Lisp dialect based on the semantics of f-expressions (the Kernel language)","url":"https://daily.dev/posts/opus-is-a-minimal-statically-scoped-lisp-dialect-based-on-the-semantics-of-f-expressions-the-kerne-lp5ia4hzj","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/opus-is-a-minimal-statically-scoped-lisp-dialect-based-on-the-semantics-of-f-expressions-the-kerne-lp5ia4hzj"},"datePublished":"2026-08-21T09:33:07.445Z","dateModified":"2026-08-21T09:33:28.485Z","description":"Opus is a minimal, statically-scoped Lisp dialect built on f-expressions from the Kernel language, implemented in Haskell using continuation-passing style and...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/cb7371519cb269d3612250c9621efbee?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/cb7371519cb269d3612250c9621efbee?_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/opus-is-a-minimal-statically-scoped-lisp-dialect-based-on-the-semantics-of-f-expressions-the-kerne-lp5ia4hzj","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"typescript,haskell,lisp","timeRequired":"PT3M"}
{"@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":"Opus is a minimal, statically-scoped Lisp dialect based on the semantics of f-expressions (the Kernel language)"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/opus-is-a-minimal-statically-scoped-lisp-dialect-based-on-the-semantics-of-f-expressions-the-kerne-lp5ia4hzj#faq","mainEntity":[{"@type":"Question","name":"What is an f-expression (fexpr) and how does it differ from a regular Lisp function?","acceptedAnswer":{"@type":"Answer","text":"An f-expression, or operative, receives its arguments unevaluated and has explicit access to the calling environment, unlike a regular function which evaluates arguments before execution. In the Opus language, a wrapped operative (via the wrap primitive) becomes a function, meaning functions and macros are unified into a single primitive called an operative, created with $vau. Explore how daily.dev surfaces deep dives on language design for developers building interpreters and DSLs."}},{"@type":"Question","name":"How can you implement a read-only sandbox in a Lisp-like language without special-casing the interpreter?","acceptedAnswer":{"@type":"Answer","text":"A capability-based sandbox can be built by treating variable binding itself as an ordinary operative rather than a hardcoded special form, then removing that binding capability inside a child environment. For example, redefining or removing $define!, raw-root!, and root within a child environment created from root makes that environment effectively read-only, all implemented in user-space code rather than interpreter internals. Follow daily.dev for more on language-level security patterns like capability-based sandboxing."}}]}
```

