Sessions
Welcome to the Macroexpand 2025 sessions! This year we have two focused conferences:
- Macroexpand-Noj (October 17-18) - Data Science with the Noj toolkit
- Macroexpand-Deep (October 24-25) - The first Clojure AI conference
All Sessions
Macroexpand-Noj Sessions 🔬
Data Science with the Noj toolkit • October 17-18, 2025
Book Basket Analysis: A Beginner's Journey with Scicloj

Book Basket Analysis: A Beginner's Journey with Scicloj

Abstract
As a newcomer to data science and Scicloj, I'll share my exploration of market basket analysis applied to publishing sales data. This case study demonstrates how even data science beginners can implement correlation analysis and the Apriori algorithm using Clojure tools. I'll walk through my learning process with Tablecloth for data manipulation and Kindly for visualizations, focusing on practical solutions rather than theoretical complexity. Join me to see how entry-level Scicloj implementations can transform customer order histories into meaningful cross-selling recommendations, proving that useful data insights are accessible without deep expertise.
Speaker
Exploring the Breath-HRV Connection with Noj



Exploring the Breath-HRV Connection with Noj



Abstract
Does your heart beat like a clock? No. It turns out that your heart rate varies. How much it varies, that is the question. Heart Rate Variability is a healthy phenomenon that relates in various ways to sleep, stress, age, various health conditions, and more. In this talk, we will see how it relates to our breath. We will learn a bit about both, see some visualizations, and demonstrate their relation through data analysis with Tablecloth, Tableplot, Clay, Fastmath, and JDSP. This is a real-world application of Noj for health data, presented by the team of Endor, a Clojure startup building a wellness app using wearable biometric data.
Speakers
Macroexpand 3
Macroexpand 3
Abstract
This meeting is part of the macroexpand gatherings series. It will focus on discussing the state of our community and initiating new projects for the near future. The session will begin by a few brief experience reports and proposals by participants. Then we will expand the discussion till we converge to actionable steps we will follow up on.
Growing a DSL

Growing a DSL

Abstract
Bioscoop is a DSL to program videos (instead of non-linear editing). It builds upon FFmpeg's filtergraphs, but it transforms the notoriously complex and error-prone string-based syntax with a structured, data-first approach amenable to composition and enhanced programmability.
Speaker
Noj Foundations


Noj Foundations


Abstract
This will be a tutorial session about some of the relevant high-performance libraries behind Noj such as ham-fisted, dtype-next, and tech.ml.dataset. See the session we had with Harold last May -- you may expect something similar.
Speakers
Noj Intro

Noj Intro

Abstract
We will practice basic data exploration with Tablecloth and Tableplot, and maybe a few other parts of the Noj toolkit. It will be a free-form session with audience participation.
Speaker
Computer Graphics with Clojure, LWJGL, and Fastmath

Computer Graphics with Clojure, LWJGL, and Fastmath

Abstract
sfsim is a space flight simulator under development. It makes use of Clojure, LWJGL, and Fastmath among other libraries. More than half of the code deals with graphics. This talk gives a short introduction using LWJGL's cross-platform OpenGL bindings to get started with rendering data from NASA's CGI Moon Kit.
Speaker
Clojure Civitas Workshop

Clojure Civitas Workshop

Abstract
We will explore the workflow and ergonomics for publishing at Clojure Civitas, the new platform where Clojurians share their ideas and explorations.
Speaker
Computing with units in Clojure

Computing with units in Clojure

Abstract
A quantity's unit plays a prominent role in science and engineering. Is it 5 milliseconds, 5 tons or 5 light-years? If you've ever named your variables now-instant, time-ms or force-kn to convey the interpretation of a number, this talk is for you!
Come learn about units and unit systems, demonstrated in a Clojure REPL.
Speaker
Water Quality - Remote Sensing

Water Quality - Remote Sensing

Abstract
Using multispectral satellite imagery in cloud-optimized geotiffs to perform simple band-ratio indices of water quality in the browser in a Clay notebook.
Speaker
Clay Workshop

Clay Workshop

Abstract
We will learn about how to use Clay for interactive data visualization, documentation, and publishing.
Speaker
Elements of Malli

Elements of Malli

Abstract
Malli is a schema validation library, similar to spec. Unlike spec, it sets its aim higher, aiming for all schema-related needs, like explanation, coercion, parsing, generation, and the best performance possible. We'll go over Malli's building blocks, how it differs from spec, how to use it effectively, and engage in a non trivial example.
Speaker
Functional Quantum Computing with QClojure

Functional Quantum Computing with QClojure

Abstract
QClojure is a functional quantum computing library for Clojure with backend protocols, simulation backends and visualizations. This talk gives a short introduction to quantum computing and the goals and features of QClojure. In a short live coding session we will create some quantum states and circuits and run some algorithms on a quantum computing simulation. We will also address some implementation topics like complex linear algebra and quantum algorithms. The talk will close with future plans for QClojure, like running on real quantum hardware and quantum machine learning (QML).
Speaker
Rolling Regressions in Clojure for Real-Time Alpha and Beta Monitoring



Rolling Regressions in Clojure for Real-Time Alpha and Beta Monitoring



Abstract
This paper / talk presents a functional, reproducible implementation of rolling regression in Clojure to estimate time-varying alpha(α) and beta(β) for student-managed portfolios at the Centre for Investment Management (CIM), The University of Hong Kong. Unlike traditional CAPM tests based on passive index data, our analysis uses actual (synthetic) trades executed by junior portfolio managers- undergraduate students who manage simulated equity portfolios over multiple semesters.
Speakers
Macroexpand-Deep Sessions 🤖
The first Clojure AI conference • October 24-25, 2025
Building Event Sourced Agentic Applications with Grain

Building Event Sourced Agentic Applications with Grain

Abstract
Learn how ObneyAI uses its open source Clojure framework called Grain to build Event Sourced applications with first-class agentic workflows that blend the best of the Clojure and Python ecosystems.
Speaker
Building Realtime Voice AI Agents with Clojure - Best Practices

Building Realtime Voice AI Agents with Clojure - Best Practices

Abstract
Exploring how to build reliable voice AI agents in a functional data-driven way with Clojure. This talk will go over all of the pieces involved in voice ai from best models to use, turn detection, context management to scripting and instruction following to hosting and scaling. By the end you will better understand what it takes to build highly reliable voice AI agents with Clojure
Speaker
Architecting reliability in LLM systems

Architecting reliability in LLM systems

Abstract
Large Language Models have captured the imagination of developers worldwide, yet many LLM-powered systems fail in production despite impressive demos. The root cause is often not technical incompetence, but rather an over-optimistic faith in LLM capabilities without accounting for their fundamental limitations. Just as an engineer hanging a heavy shelf wouldn't rely solely on manufacturer specifications without safety margins, building reliable LLM systems requires a "Murphy's Law" mindset that anticipates failure modes. Through our experience building StartCheck, a production document analysis platform, we've learned that true reliability comes from understanding and designing around core LLM limitations: input quality sensitivity, task complexity degradation, reasoning constraints, output length trade-offs, hallucinations, and consistency challenges.
Speaker
Experimenting with LLM Subliminal Learning in Clojure

Experimenting with LLM Subliminal Learning in Clojure

Abstract
I read the paper "Subliminal Learning: Language models transmit behavioral traits via hidden signals in data" and wanted to explore these concepts myself. In this talk I replicate some of the results from the paper interactively in a live coding demo. Specifically, we will look at running multiple interdependent batch processing jobs from a Clojure REPL.
Speaker
2D CFD Simulation based optimization of airfoils using freecad & openfoam


2D CFD Simulation based optimization of airfoils using freecad & openfoam


Abstract
TBA
Speakers
Building QClojure with AI assistance

Building QClojure with AI assistance

Abstract
QClojure is a functional quantum computing library for Clojure with backend protocols, simulation backends and visualizations. It has been built with AI assistance right from the beginning. Four months into the implementation, I have gained some experience with AI assisted coding, which I'd like to share in this talk.
First I like to give an overview of QClojure to set the stage. I will show the tools and the workflow for AI assisted coding, including some prompts. Then we look at the actual process of working with the AI. Finally I will give you some of my best practices and summarize with the lessons learned.
Speaker
A Clojure-based Portfolio Analysis Tool based on LLM Integration



A Clojure-based Portfolio Analysis Tool based on LLM Integration



Abstract
This research paper / talk presents the design and implementation of a Portfolio Analysis Program built almost entirely in Clojure for The University of Hong Kong's Center for Investment Management.
The program enables users to construct custom portfolios from individual stocks or asset classes, evaluate performance using key financial metrics, and visualize results interactively.
What sets this tool apart is its integration of financial market narratives through a Large Language Model (LLM), which contextualizes portfolio performances using real-time financial news.
Speakers
Panel: broader implications of AI





Panel: broader implications of AI





Abstract
We will discuss the broader implications of the AI rush, a few of the ways it affects our lives, and what we might be able to do about it.
Speakers
Jank & Torch: Native Deep Learning in Clojure



Jank & Torch: Native Deep Learning in Clojure



Abstract
In the field of AI, Python is the current reigning champ. But the Python ecosystem's dirty secret is that most of the libraries holding the system together are wrappers around C/C++ libraries that do most of the important work. Jank is the native Clojure dialect built on compiler technologies like LLVM, giving it access into the same native libraries powering the Python ecosystem. As Jank heads towards its first alpha release, its most highly anticipated feature, seamless C++ interop is already capable of wrapping and using native C++ libraries for machine learning and artificial intelligence. In this talk, we will show how to leverage Jank's C++ interop to wrap the most popular deep learning library in usage right now, libtorch, which most would have known through its Python frontend, PyTorch. As a proof of concept, we will display an implementation of GPT-2, the LLM released in 2019 using our Torch wrapper. This talk will give Clojure practitioners interested in using Clojure for ML/AI a glimpse into the future of how important C++ libraries can be utilized with Jank.
Speakers
Panel: AI assistants



Panel: AI assistants



Abstract
We will have a conversation with a few of the toolmakers behind Clojure's main AI assistants.
Speakers
Building Dynamic Entity Extraction with Bosquet

Building Dynamic Entity Extraction with Bosquet

Abstract
Every text processing application needs to answer a question: what is this text about? Named entity extraction is one part of the answer to this. It identifies and links words to real-world entities—turning "Macroexpand 2025" into structured data about a specific technology conference happening in a specific year.
This extraction process involves multiple steps that can be implemented using LLMs. This presentation demonstrates how Bosquet, an LLM orchestration library, can help with building entity extraction pipelines.
Speaker
Compiling Probabilistic Programs to Neural Networks

Compiling Probabilistic Programs to Neural Networks

Abstract
We will take a look at how one can write a stochastic simulator for a simple business model, how embeddings and a graph neural network architecture for the compute graph of the simulator can be constructed, and how this neural network can be trained to provide fast inference over unknown variables of the simulator to guide the business process in real-time. We will then discuss the underlying methodology of probabilistic programming more systematically through the Daphne compiler, and how it provides different ways to compile a subset of Clojure simulator programs to neural network architectures, and as of lately also CUDA. The goal of this discussion is to provide understanding of both the methodology and applications of probabilistic programming, as well as to gather more feedback from the Clojure community to render Daphne not only an academic platform, but also more practical. One such potential practical integration we will discuss is with LLMs that can help with the simulator construction.
Speaker
Bridging Worlds: Building Graph Neural Networks with Clojure and Python Interoperability (+ Practice)

Bridging Worlds: Building Graph Neural Networks with Clojure and Python Interoperability (+ Practice)

Abstract
Discover how to build Graph Neural Networks by combining Clojure's functional elegance with Python's ML ecosystem. This talk demonstrates practical interoperability using libpython-clj to call PyTorch Geometric from Clojure, creating powerful GNN solutions while maintaining REPL-driven development workflows. We'll live-code a complete Graph Convolutional Network, from data ingestion to visualization, showing how Clojure's immutability and Python's deep learning capabilities create a useful combination for modern AI development. After the talk and discussion, we will practice some things in the REPL together: using PyTorch from Clojure, and maybe more.
Speaker
Learn more about Macroexpand 2025 and our speakers.