<?xml version='1.0' encoding='utf-8' ?>
<!-- Made with love by pretalx v2026.3.0.dev0. -->
<schedule>
    <generator name="pretalx" system="cfp.scaladays.org" version="2026.3.0.dev0" />
    <version>0.11</version>
    <conference>
        <title>Scala Days 2026</title>
        <acronym>scala26</acronym>
        <start>2026-10-12</start>
        <end>2026-10-13</end>
        <days>2</days>
        <timeslot_duration>00:05</timeslot_duration>
        <base_url>https://cfp.scaladays.org</base_url>
        <logo>https://cfp.scaladays.org/media/scala26/img/logo_SDrJdZG.webp</logo>
        <time_zone_name>Europe/Berlin</time_zone_name>
        
        
    </conference>
    <day index='1' date='2026-10-12' start='2026-10-12T04:00:00+02:00' end='2026-10-13T03:59:00+02:00'>
        <room name='Kesselhaus' guid='73eafa1d-cf48-5741-8c18-5e2b69b6b1e5'>
            <event guid='85b64c26-a007-5966-9153-1edadab58298' id='106250' code='JEQ8GD'>
                <room>Kesselhaus</room>
                <title>Opening Session &amp; Keynote: The End of Programming?</title>
                <subtitle></subtitle>
                <type>Keynote</type>
                <date>2026-10-12T09:00:00+02:00</date>
                <start>09:00</start>
                <duration>01:00</duration>
                <abstract>Coding agents are fundamentally upsetting our routines and expectations about software development. Are we witnessing the end of (human) programming, where software construction will be exclusively the domain of agents? Many claim so, but I would like to think otherwise. I believe it&apos;s essential that humans stay in the loop, even if large parts of a software system will be written and reviewed by agents. To achieve this, we will likely need fundamental changes in programming languages and programming workflows, This talk will start the discussion about what kind of possible innovations could help.</abstract>
                <slug>scala26-106250-opening-session-keynote-the-end-of-programming</slug>
                <track></track>
                
                <persons>
                    <person id='105376'>Martin Odersky</person>
                </persons>
                <language>en</language>
                
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/JEQ8GD/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/JEQ8GD/feedback/</feedback_url>
            </event>
            <event guid='e2ec688f-c48c-5d15-ac4a-e25d6b23f499' id='99382' code='FZDGGW'>
                <room>Kesselhaus</room>
                <title>sbt 2.0: takeoff</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-12T10:30:00+02:00</date>
                <start>10:30</start>
                <duration>00:30</duration>
                <abstract>sbt 2.0 is a new major series of sbt that propels itself to the modern standards. In this talk, we will focus on the new features such as the native client, Bazel-compatible caching, and new test command.

We will also go over the plugin migration effort, the differences between sbt 1 vs 2, and common pitfalls during migration.</abstract>
                <slug>scala26-99382-sbt-2-0-takeoff</slug>
                <track></track>
                
                <persons>
                    <person id='98838'>Eugene Yokota</person>
                </persons>
                <language>en</language>
                <description>Building on &apos;sbt 2.0: go big&apos; talk I gave, which provided visions and background around sbt 2.0 project, we can shift the focus more towards the user experience of sbt 2.0 (which would be available by Scala Days 2026).

### Summary
The talk will pick up a few common tasks such as `test` and `run` that have completely changed its behavior, and explain the concrete differences between sbt 1 vs 2.

We will also focus on some of the `build.sbt` example that breaks cache hermeticity to highlight caching pitfalls.

### Relevance
I think this would be a relevant talk for the community given the wide usage of sbt (85.7% in 2026 survey), involvement of Scala Center + Sovereign Tech Agency, and hopefully general interest around what&apos;s new with sbt.

### Takeaway
- General understanding of key features such as common settings and cached tasks
- Major differences between sbt 1 vs sbt 2
- Pointers to learn about sbt or migration later</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/FZDGGW/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/FZDGGW/feedback/</feedback_url>
            </event>
            <event guid='7158679c-b0a1-504d-9875-346f509a8a8f' id='100027' code='LS3ZDZ'>
                <room>Kesselhaus</room>
                <title>A brief history of Scala</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-12T11:20:00+02:00</date>
                <start>11:20</start>
                <duration>00:30</duration>
                <abstract>What can one tiny function teach you about twenty years of Scala? We rewrite `isPalindrome` version by version and let the code tell the story. Watch it grow from classic Scala 2 into the modern Scala 3;  tail recursion, type classes, extension methods, all earning their place. A palindrome reads the same both ways, Scala&apos;s history does not.</abstract>
                <slug>scala26-100027-a-brief-history-of-scala</slug>
                <track></track>
                
                <persons>
                    <person id='99411'>Odd M&#246;ller</person><person id='99412'>Martin Zachrison</person>
                </persons>
                <language>en</language>
                <description>Scala has spent over two decades reinventing how to write code. New syntax arrives while some idioms slip into retirement, and the obvious way to express something in 2010 can look very different by 2026. Rather than march through the changelog, we tell that story with the help of a simple function: `isPalindrome`, as it evolves with Scala versions.
We start with a one-liner and let the problem itself pull in new language machinery, one feature at a time, only adding things when they are needed. We will look into generalizing from `String` to `Seq[A]`, using tail recursion with `@tailrec`, and sequence extractors `+:`/`:+` that peel a palindrome from both ends in a single pattern. Asking what &quot;equal&quot; even means walks us through type classes as implicits and their given/using reincarnation. We close by letting the answer say something more than just `true` or `false`, contrasting sealed-trait ADTs with Scala 3 enums, and wrapping the whole thing as a fluent extension method.
Each step fits on a single slide, and together they become a tour of Scala&apos;s evolving style via type abstraction, recursion, the implicits-to-givens transition, ADTs, and extension methods.
Audience members leave with a timeline of Scala&apos;s syntax and idiom changes, a clearer sense of why features were added rather than merely that they were. No prior history required; just a fondness for strings that read the same both ways.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/LS3ZDZ/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/LS3ZDZ/feedback/</feedback_url>
            </event>
            <event guid='f6edbe41-b7f5-52a9-9d5a-5f14343d56e3' id='103107' code='MKMNWA'>
                <room>Kesselhaus</room>
                <title>A Maiden Voyage into Open Source, Datatypes, and Scala</title>
                <subtitle></subtitle>
                <type>Lightning Talk</type>
                <date>2026-10-12T12:10:00+02:00</date>
                <start>12:10</start>
                <duration>00:05</duration>
                <abstract>What optimizations can we find by making a simple change to a traditional data structure? In the summer of 2026 I developed a faster immutable linked list; implementing it was my first experience both writing Scala and working with an open source community. This talk explores my approach to data structure optimization and my acquisition of Scala.</abstract>
                <slug>scala26-103107-a-maiden-voyage-into-open-source-datatypes-and-scala</slug>
                <track></track>
                
                <persons>
                    <person id='102052'>L Denney</person>
                </persons>
                <language>en</language>
                <description>What if we take a traditional data structure and make a small change to it. What kind of optimizations and use cases could we exploit by simply thinking beyond what we already use every day. 

This is a question I tackled with support from Google Summer of Code and the Typelevel community for 3 months through the summer of 2026. Immutable linked lists are important data structures for many functional programming applications, notably in concurrency, but what if a simple change could make them faster. Many of the most common operations we want on a list require as many pointer dereferences as elements in the list, including appending, concatenation, and methods like map and filter. Now imagine generalizing the idea of the linked list where instead of each node holding only a single element, each node holds a block of elements: each is an array of a constant size. By making this simple change, we can decrease pointer dereferences by a factor of the size of the block! Furthermore, we can use benchmarking to select an optimal block size and discover other areas where improvements can be made.

I proposed the above project to Typelevel back in April of 2026. As for my background, I&#8217;ve loved functional programming since I took the introductory class in my third year of university. I went on to TA the class for three semesters, fortifying my functional programming foundations and learning how to teach a paradigm many students have never encountered before. 

When my project proposal was accepted and I began work on it, I had never touched a Scala program before. As of writing this description I am a mere 4 days into the project, and already I have learned so much about Scala. I expect the talk to be about the process of developing this block linked list datatype, interwoven with reflections and observations on the process of learning Scala and participating in the Typelevel community. 



This talk has two primary goals:
- To make exploring data structures optimizations approachable, worthwhile, and fun!
- To give insight into the experience of learning Scala and contributing to open source for the first time.


Outline of the proposed talk
- Introduction/motivation
- Project Description
- Personal background
- Overview of the process of developing the new datatype, through the lens of navigating a new community and programming language
- Final reflections on the experience</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/MKMNWA/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/MKMNWA/feedback/</feedback_url>
            </event>
            <event guid='a3118dd3-d35c-5e2f-8701-ac3d58288b4c' id='103150' code='GLEFDT'>
                <room>Kesselhaus</room>
                <title>Cats Go Wasm/WASI: Typelevel on Server-side WebAssembly</title>
                <subtitle></subtitle>
                <type>Lightning Talk</type>
                <date>2026-10-12T12:20:00+02:00</date>
                <start>12:20</start>
                <duration>00:05</duration>
                <abstract>Recent work in the [scala-wasm fork](https://github.com/scala-wasm/scala-wasm) of Scala.js has made it possible for Scala apps to run directly on the WebAssembly Component Model platform. In this talk, I will share my progress of porting Cats Effect and FS2 libraries to this shiny new architecture.</abstract>
                <slug>scala26-103150-cats-go-wasm-wasi-typelevel-on-server-side-webassembly</slug>
                <track></track>
                
                <persons>
                    <person id='102166'>Mariusz Jakoniuk</person>
                </persons>
                <language>en</language>
                <description>[The WebAssembly Component Model](https://component-model.bytecodealliance.org/introduction.html) is a new platform for building secure, composable Wasm applications with explicitly defined, type-safe interfaces. All communication between Wasm components and the outside world has to go through standardized interfaces such as [WASI](https://wasi.dev/). As a result of this design, all Scala code directly accessing platform-specific APIs has to be ported over to this new platform.

This year, [my proposal](https://summerofcode.withgoogle.com/programs/2026/projects/vibpm0UF) to port core parts of the Typelevel stack onto the Wasm/WASI platform was chosen for the [Google Summer of Code program](https://summerofcode.withgoogle.com/). Even though the resulting code is still a prototype, it makes it possible for several real-world apps to &quot;just run&quot; as Wasm components with little to no changes.

In this lightning talk, I will briefly go over the set of core I/O mechanisms used by Cats Effect and FS2 and describe their prototype implementation for the WASI 0.2 API.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/GLEFDT/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/GLEFDT/feedback/</feedback_url>
            </event>
            <event guid='0587834a-242d-573b-915c-cb7dae2a0ffb' id='103294' code='XZN3MU'>
                <room>Kesselhaus</room>
                <title>Inline Traits for Specialization</title>
                <subtitle></subtitle>
                <type>Lightning Talk</type>
                <date>2026-10-12T12:30:00+02:00</date>
                <start>12:30</start>
                <duration>00:05</duration>
                <abstract>Inline traits are a language feature that eliminate allocations and virtual dispatch associated with trait composition in Scala. They do so by inlining their methods into their implementing subclasses. When inline traits are combined with the Specialized type class, they enable trait-based abstractions to be zero-cost.</abstract>
                <slug>scala26-103294-inline-traits-for-specialization</slug>
                <track></track>
                
                <persons>
                    <person id='102330'>James You</person>
                </persons>
                <language>en</language>
                <description>Specialization is a compiler transformation that optimizes generic program code such that code using primitive types can execute without significant overhead. The @specialized annotation in the Scala 2 programming language allowed programmers to direct the compiler to create optimized generic data structures for each primitive type. @specialized is used significantly in the implementation of high-performance Scala 2 libraries, allowing for performance without the productivity of generics. This optimization trades performance at the cost of extra space, as generic code must be specialized for each of the primitive types, scaling exponentially on the number of type parameters. Since the Scala 3 programming language has evolved significantly from Scala 2, the @specialized annotation is no longer available. This talk will briefly describe a new scheme of specialization for the Scala 3 compiler based on inline traits.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/XZN3MU/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/XZN3MU/feedback/</feedback_url>
            </event>
            <event guid='4f1a22b4-a7da-54a9-8c10-04260cfb3a27' id='99571' code='EDJA7U'>
                <room>Kesselhaus</room>
                <title>The state of Scala in 2026</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-12T14:10:00+02:00</date>
                <start>14:10</start>
                <duration>00:30</duration>
                <abstract>With Scala 3.9 LTS out, three Scala distributions will exist in parallel: Scala Next (3.10+), the current 3.9 LTS and the old 3.3 LTS.

We will explain how to think about it: why you should migrate your libraries to 3.9 LTS, what cool features have we cooked up in Scala Next, and how the standard library can evolve now that it&#8217;s no longer frozen.</abstract>
                <slug>scala26-99571-the-state-of-scala-in-2026</slug>
                <track></track>
                
                <persons>
                    <person id='98868'>Piotr Chabelski</person><person id='99057'>Lukas Rytz</person>
                </persons>
                <language>en</language>
                <description>[As I write this talk description, the first release candidate of the new Scala 3.9 LTS is being prepared in the background. By Scala Days &#8216;26, Scala 3.9 LTS will be out in the wild, likely with Scala Next already at 3.10 series.]

Scala 3.9 LTS is the second LTS series in the history of Scala, 3 years after its predecessor, 3.3 LTS. We bumped the required JDK to 17 and packed many new features, such as named tuples, better for comprehension loops, a new language runner (Scala CLI) or a bytecode optimizer.

Scala 3.3 LTS still works with older JDKs and will be supported for at least another year. That should be a sufficiently long window for the community to migrate, as currently it is the most widely used distribution. Scala 2.13 will also continue receiving security and bug fixes, as well as JDK compatibility updates.

We will take an early look at Scala 3.10, which will drop a number of legacy constructs to make space for new features.

The standard library is getting unfrozen and open to contributions from 3.10 onwards, with a dedicated process in SLC. We will explain how (and why) it differs from SIP and what kind of changes would be accepted.

In this talk we will trace where Scala is today, where we are taking it, and how you can help shape it.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/EDJA7U/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/EDJA7U/feedback/</feedback_url>
            </event>
            <event guid='16cc65f1-c34d-5e70-bb59-15c38c2013fc' id='99524' code='7KYEXS'>
                <room>Kesselhaus</room>
                <title>Shopping for a Scala Framework</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-12T15:00:00+02:00</date>
                <start>15:00</start>
                <duration>00:30</duration>
                <abstract>We present a new Scala framework that picks ideas from Django, Spring, Rails, and a few others, and integrates them in a way only Scala can.

We aim to show that building and deploying powerful applications can and should be easy in Scala, and not just for experts.</abstract>
                <slug>scala26-99524-shopping-for-a-scala-framework</slug>
                <track></track>
                
                <persons>
                    <person id='97318'>Daniel Cioc&#238;rlan</person><person id='99149'>Riccardo Cardin</person>
                </persons>
                <language>en</language>
                <description>Scala deserves a great web framework. We&apos;re building it.

Our framework builds around a few big ideas:

1. Your data model is the source of truth, and everything else (schemas, resources, endpoints, serialization) can be derived.
2. Capabilities are visible in all critical signatures, so the compiler stops you if you&apos;re trying something without the necessary resources.
3. Server-rendered, server-stateful UI with real-time updates over a tiny WebSocket runtime (a few KB).
4. Boring infrastructure and simple commands. The framework comes with its own CLI to deploy applications in seconds.

The result combines (what we think are) the best parts of existing frameworks, like Rails, Spring, and Phoenix, with the power of Scala to produce an exceptionally high productivity framework.

In our talk we will create a non-trivial application in only thirty minutes, which will demonstrate the features we described above and prove our claim about productivity.

By the end of the talk, we hope that you&apos;ll get curious and excited enough to try this framework on a new project. This framework, if successful, has the potential to

- put Scala back on the map for application development, 10 years after Play&#8217;s peak relevance;
- attract newcomers to Scala; and
- create new startups which are the beginning stage of the adoption cycle (in terms of both people and companies)

and you are the first audience to see it live.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/7KYEXS/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/7KYEXS/feedback/</feedback_url>
            </event>
            <event guid='67515832-99dd-50df-af36-995ef76331e8' id='98544' code='XSQMQV'>
                <room>Kesselhaus</room>
                <title>The State of Scala on WebAssembly</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-12T15:50:00+02:00</date>
                <start>15:50</start>
                <duration>00:30</duration>
                <abstract>WebAssembly is increasingly used beyond browsers for serverless, sandboxing, AI workloads, and more. This talk explores the current state of Scala on Wasm with Scala.js and scala-wasm, an experimental project targeting standalone runtimes, WASI, and the Component Model. This session covers current capabilities, limitations, and future directions.</abstract>
                <slug>scala26-98544-the-state-of-scala-on-webassembly</slug>
                <track></track>
                
                <persons>
                    <person id='98041'>Rikito Taniguchi</person>
                </persons>
                <language>en</language>
                <description>WebAssembly is increasingly used beyond the browser for [serverless](https://www.akamai.com/blog/developers/build-serverless-functions-zero-cold-starts-webassembly-spin) platforms, [sandboxed execution, AI workloads](https://thenewstack.io/webassembly-sandboxing-ai-agents), and more. As the Wasm ecosystem grows, it is no longer limited to systems languages such as Rust and C++
[Scala.js now supports a Wasm](https://www.scala-js.org/doc/project/webassembly.html) alongside JavaScript, and the [scala-wasm](https://github.com/scala-wasm/scala-wasm) project explores [Wasm/WASI](https://wasi.dev/), and the [Component Model](https://component-model.bytecodealliance.org/).

**This talk covers what currently works and what remains experimental, what WASI and the Component Model are, how they can be used from Scala, and the practical benefits of compiling Scala to Wasm.**

Topics include:

- How to compile and run Scala applications on Wasm
- The current state of the Scala Wasm backend
- The basics of WASI and the Wasm Component Model
- How Wasm sandboxing protects you from AI
- How to build serverless Wasm applications in Scala</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/XSQMQV/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/XSQMQV/feedback/</feedback_url>
            </event>
            <event guid='eaf4d67f-96f8-59f0-8f6a-275abed09f2a' id='98744' code='8PAEJW'>
                <room>Kesselhaus</room>
                <title>Caching in Scala using Cats Ref</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-12T16:40:00+02:00</date>
                <start>16:40</start>
                <duration>00:30</duration>
                <abstract>Modern distributed systems depend on caching for performance, yet implementing caching correctly and safely remains a persistent challenge. This talk explores how Cats Ref from the Typelevel ecosystem enables developers to build thread-safe, testable cache while maintaining functional purity.</abstract>
                <slug>scala26-98744-caching-in-scala-using-cats-ref</slug>
                <track></track>
                
                <persons>
                    <person id='98228'>Katrina Petrevice</person>
                </persons>
                <language>en</language>
                <description>Through hands-on exploration of Cats&#160;`Ref`&#160;and a realistic API caching scenario, this talk exposes the subtle pitfalls that commonly catch developers off guard when implementing&#160;`Ref`. Rather than learning these lessons painfully through production incidents, the talk provides practical strategies to recognise, prevent, and test them from the start.

The talk will aim to establish foundational knowledge; what `Ref` is, why it represents the ideal abstraction for concurrent cache implementations, and how it maintains both safety and purity in the presence of mutability. Building on this foundation, the talk examines core caching principles, exploring when caching is appropriate and how to choose strategically between in-memory and cloud-based solutions. By the end attendees should gain confidence implementing&#160;`Ref`&#160;with a clear understanding of its behaviour and implications beyond that of caching.

The talk has been previously presented at London Scala User Group (LSUG) to a diverse audience, including those unfamiliar with the Typelevel stack. As the speaker I bring three years of production Scala experience, whereby I have used `Ref`  for caching large scale business data models for quick retrievals and dynamic configuration updates without server restarts. I aim to bring fresh perspectives on `Ref` with direct takeaways from my experiences with Typelevel stack.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/8PAEJW/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/8PAEJW/feedback/</feedback_url>
            </event>
            <event guid='207b0cf8-1888-57f1-af5d-824d30e5eb36' id='106270' code='PCDP8E'>
                <room>Kesselhaus</room>
                <title>Community Party</title>
                <subtitle></subtitle>
                <type>#ScalaDays</type>
                <date>2026-10-12T18:00:00+02:00</date>
                <start>18:00</start>
                <duration>04:00</duration>
                <abstract>ScalaDays is a good place to meet great people, and while there is ample time to chat and discuss during the conference, we also want to provide an opportunity for everyone to meet up outside of the regular conference program with our Community Party on Monday! 

Our Community Party will take place at Frannz Salon. It is a casual meet-up in a relaxed atmosphere and provides a perfect opportunity to meet old and new friends, business contacts or get to know other participants of ScalaDays. We will offer food as well as alcoholic and non-alcoholic drinks.</abstract>
                <slug>scala26-106270-community-party</slug>
                <track></track>
                
                <persons>
                    
                </persons>
                <language>en</language>
                
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/PCDP8E/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/PCDP8E/feedback/</feedback_url>
            </event>
            
        </room>
        <room name='Maschinenhaus' guid='841323ee-f609-5b3d-aa4a-96586dcef074'>
            <event guid='a445c058-cacc-5212-b924-f4a0885354a9' id='98940' code='SLQC7Y'>
                <room>Maschinenhaus</room>
                <title>Simpler User Interfaces with Capability-Passing</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-12T10:30:00+02:00</date>
                <start>10:30</start>
                <duration>00:30</duration>
                <abstract>Representing user interfaces as effects in the capability-passing style gives a simple framework for creating UIs. In this talk I&apos;ll explain how capability-passing works and use it to implement a simple terminal user interface library. We&apos;ll then discuss what general principles we can take from this, that can apply to any problem.</abstract>
                <slug>scala26-98940-simpler-user-interfaces-with-capability-passing</slug>
                <track></track>
                
                <persons>
                    <person id='98419'>Noel Welsh</person>
                </persons>
                <language>en</language>
                <description>**Description**

Modern user interface libraries represent interfaces as effects in the capability-passing style. Scala 3 has excellent support for this style of programming. I&apos;ll demonstrate this by implementing a simple terminal user interface framework in the capability-passing style. The resulting framework is straightforward to use, and catches certain classes of errors at compile-time. I&apos;ll then describe the general principles we can take from this exercise, giving you the mental models to use capability-passing in your own projects.

**Goals**

The main goals of this talk are:

1. To show that capability-passing is a useful tool, by building a simple terminal user interface framework with it.
2. To abstract the design into general principles for creating frameworks using capability-passing. 

**Outline**

- Effects, context, and capabilities. Explain three core ideas of effects, context, and capabilities. Describe the goals of an effect system: tracking effect usage and preventing effects when it is not safe to use them.
- Interfaces are hard. From a simple UI example, examine the underlying issues and see why they are difficult to implement. We&apos;ll see we need to create two structures, the layout tree and the event graph, and these structures have mutual dependencies.
- Modern frameworks. Look at an example modern user interface framework (probably Jetpack Compose, as it has all the features I want to show) and see how it solves the problems. Show that this is capability-passing, but not made explicit.
- User Interfaces in Scala. Can we do better in Scala? Of course we can. Implement a basic terminal user interface framework in Scala. Show we can represent both the layout tree and event graph as capabilities, using just language features in Scala.
- Type systems squash bugs. Show how we can use the type system to prevent simple but annoying bugs, such as using an event source outside a reactive scope. Talk about how capture-checking can prevent more bugs (but I probably won&apos;t have time to go into details.)
- Capability-passing as a design strategy. Abstract what we&apos;ve learned. We can build tree structures, more flexibly than with algebraic data types, using capability-passing. We can also build graph structures if we reify graph vertices. Finally, we can do away with sequencing combinators such as `map` and `flatMap` and just run in &quot;direct-style&quot;. Show how this still retains desirable properties of reasoning and composition.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/SLQC7Y/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/SLQC7Y/feedback/</feedback_url>
            </event>
            <event guid='99705aa3-1a2a-5a04-aa89-9eaf81a85e9a' id='100040' code='EYKYAL'>
                <room>Maschinenhaus</room>
                <title>AI Multiplies &#8212; Let Scala Hold the Line</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-12T11:20:00+02:00</date>
                <start>11:20</start>
                <duration>00:30</duration>
                <abstract>AI is a multiplier, not a fixer &#8212; point it at a mess, and it scales the mess up: defects climb, reviews balloon, tests become a farce. Scala&apos;s honest compiler and typed libraries are a base that holds as you push harder. We&apos;ll assemble the workflow around them with agents, context, deterministic refactors, hermetic builds and more.</abstract>
                <slug>scala26-100040-ai-multiplies-let-scala-hold-the-line</slug>
                <track></track>
                
                <persons>
                    <person id='99422'>Krzysztof Romanowski</person>
                </persons>
                <language>en</language>
                <description>A year ago, my argument was that productivity lives in the whole development lifecycle, not in how fast anyone types. AI hasn&apos;t changed that &#8212; it made it unforgiving. The instinct is to treat an agent as a fixer, something you point at a problem to make it go away. It isn&apos;t. It&apos;s a multiplier, and a multiplier obeys whatever it&apos;s standing on. Direct it at a shaky team process, and nothing gets repaired; the shakiness simply scales. More defects, longer review queues, green test suites that are quietly wrong &#8212; and reworks that grow faster than anyone wants to admit.
Which reframes the whole question. It&#8217;s not &quot;how do we add AI?&quot;, it&#8217;s &quot;what is it multiplying?&quot; For Scala teams, the honest answer is the language itself. Strongly typed libraries and a compiler that refuses to lie give you a foundation that gets firmer under pressure. This allows to discover failures at runtime - the kind of failures that only surface at runtime on production with other stacks.. The types you already have are complex enough. What&apos;s usually missing is a process built to lean on them.
So that&apos;s what we&apos;ll assemble, one component at a time, like building together a kit. Context Fabric, CI build for Machine Speeds, Tiered Review and testing strategies for the AI era. We will apply the same discipline we&apos;ve been using in large monorepo teams &#8212; the Airbnb and Databricks tier &#8212; where we&apos;re seeing output climb by roughly half in a matter of months, but in a way that can be split and rearranged to match your context. You won&apos;t leave with a mandate to adopt all of it. You&apos;ll leave with the kit, the cost of each piece, and a clear sense of what to reach for next on your own Scala projects &#8212; a way to raise productivity and quality at the same time, instead of trading one for the other.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/EYKYAL/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/EYKYAL/feedback/</feedback_url>
            </event>
            <event guid='f32793b7-a33f-5afc-be76-be11982c5d4a' id='99964' code='MM3RRZ'>
                <room>Maschinenhaus</room>
                <title>Scala&apos;s LibGDX: A Report from the Trenches</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-12T14:10:00+02:00</date>
                <start>14:10</start>
                <duration>00:30</duration>
                <abstract>Java has LibGDX. Scala has powerful platforms, but not the same game-development story. SGE is my attempt to close that gap. This talk is about the engineering needed to make one Scala codebase run across desktop, browser, native and Android targets.</abstract>
                <slug>scala26-99964-scala-s-libgdx-a-report-from-the-trenches</slug>
                <track></track>
                
                <persons>
                    <person id='99364'>Mateusz Kubuszok</person>
                </persons>
                <language>en</language>
                <description>In this talk I will describe how the initial goal of building a Scala game engine with LibGDX-like reach led to a series of deeper platform-engineering problems: how to port a large Java ecosystem with LLMs without trusting them blindly, how to track source parity, tests and coverage, how to build sbt tooling for multi-architecture JVM packaging and Scala Native cross-compilation, and how to ship native dependencies with the right linker flags for each platform.

The audience will see SGE as a case study in ambitious multi-platform Scala: what works today, what fights back, and what still needs to improve. The talk is not mainly about game design. It is about the infrastructure required to make Scala usable for desktop, browser, native and Android applications from one codebase.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/MM3RRZ/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/MM3RRZ/feedback/</feedback_url>
            </event>
            <event guid='f79b0321-e7cd-5294-a1e5-52c6f179ef19' id='106178' code='G79UPY'>
                <room>Maschinenhaus</room>
                <title>Hard to Hire, Hard to Learn, Hard to Break: A CTO&apos;s Scala Case</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-12T15:00:00+02:00</date>
                <start>15:00</start>
                <duration>00:30</duration>
                <abstract>To business leadership, Scala looks like a high-risk bet: the talent is expensive and the learning curve is a wall. So why willingly sign off on a technology that makes recruiting harder? Because optimizing for cheap headcount is a false economy. This fast-paced session bridges the gap between engineering elegance and CFO mathematics. You will learn how to expose the &quot;shadow payroll&quot; of bloated polyglot teams, and leave armed with the exact financial vocabulary needed to prove that a lean, elite Scala team is the most aggressive risk-mitigation strategy a CTO can deploy.</abstract>
                <slug>scala26-106178-hard-to-hire-hard-to-learn-hard-to-break-a-cto-s-scala-case</slug>
                <track></track>
                
                <persons>
                    <person id='105276'>Gordon Cooke</person>
                </persons>
                <language>en</language>
                <description>Scala Days is packed with brilliant deep dives into the &quot;how&quot; of the language, but this session zooms out to ask the fundamental &quot;why.&quot;
When engineers pitch Scala to business leadership, the conversation usually hits a wall. To a CTO or CFO, Scala looks like a high-risk bet: the talent is expensive, and the hiring pipeline is slow. The default corporate instinct is to mitigate this by optimizing for &quot;cheap headcount&quot;&#8212;often resulting in massive teams writing in verbose, weakly-typed languages.
But that optimization is a false economy. In this fast-paced session, we will bridge the gap between engineering elegance and business reality by examining the true Total Cost of Ownership (TCO) in complex domains. We will expose the &quot;shadow payroll&quot;&#8212;the hidden layers of engineering managers, manual QA testers, and incident responders required to babysit bloated polyglot architectures.
By framing Scala&#8217;s compiler as an automated compliance officer and its concise syntax as a tool for architectural leverage, attendees will learn how to identify the exact workloads where Scala wins. You will walk away with the financial vocabulary and organizational math required to prove to your stakeholders that a lean, elite Scala team is ultimately far more cost-effective than a sprawling alternative.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/G79UPY/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/G79UPY/feedback/</feedback_url>
            </event>
            <event guid='123e10ee-713c-5bf0-a0ee-f928c5c80040' id='97351' code='LXXBWY'>
                <room>Maschinenhaus</room>
                <title>Is metaprogramming just functional programming?</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-12T15:50:00+02:00</date>
                <start>15:50</start>
                <duration>00:30</duration>
                <abstract>Metaprogramming is the act of treating code as data, to transform it, yielding new programs. Is that not also what functional programming is all about? Similarly, what does compile time mean, when mixed with IO, where programs are constructed and run in separate phases? Let&apos;s talk about it together.</abstract>
                <slug>scala26-97351-is-metaprogramming-just-functional-programming</slug>
                <track></track>
                
                <persons>
                    <person id='96957'>Kathryn Frid</person>
                </persons>
                <language>en</language>
                <description>What is metaprogramming? Definitionally it is just manipulating code as data, to produce new programs. By that logic, is `map` and `flatMap` not metaprogramming? Is is metaprogramming if you use `inline`? What about if you use quotes and splices?

How does compiletime vs runtime factor into this? How about with something like `IO`, where all you are really doing is putting together a program from smaller pieces? What does compiletime vs runtime mean there?

How about program analysis? That is metaprogramming, and not something functional programming can do as easily, right?

I do not have the definitive answer to any of these questions, but I hope we can discuss them together, and maybe come closer to some idea about how metaprogramming and functional programming are similar, but possibly still different. If you&apos;ve never interacted much with metaprogramming before, I hope I can give you an introduction of sort, not on how to do it, but why.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/LXXBWY/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/LXXBWY/feedback/</feedback_url>
            </event>
            <event guid='c286ed52-652c-5906-abfe-85edd7095d21' id='98925' code='8RMYG9'>
                <room>Maschinenhaus</room>
                <title>Optimizing Scala bytecode for fun and profit</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-12T16:40:00+02:00</date>
                <start>16:40</start>
                <duration>00:30</duration>
                <abstract>Can high-level code have the same perf as low-level hand-tuned code?
That&#8217;s what Scala&#8217;s optimizer is for! Your call to map on a list turns into the same bytecode as if you had written a while loop.
In this talk, I&#8217;ll introduce bytecode and optimization basics, present the Scala optimizer, and discuss fundamental and temporary limitations.</abstract>
                <slug>scala26-98925-optimizing-scala-bytecode-for-fun-and-profit</slug>
                <track></track>
                
                <persons>
                    <person id='98406'>Solal Pirelli</person>
                </persons>
                <language>en</language>
                <description>Every developer wants to write high-level declarative code that&#8217;s easier to maintain while also getting the performance benefits of low-level imperative code that doesn&#8217;t pay the costs of abstraction.
The Scala compiler has a bytecode optimizer to help reach that goal, and the JVM also performs its own optimizations.
However, there are plenty of interesting problems and tradeoffs along the way. For instance, while inlining code can help avoid virtual calls and allocations, it can also cause slowdowns from having too much code to load and keep in the instruction cache. Even if a specific optimization is profitable, it may rely on such a specific code shape that it is too brittle to be depended upon.
Optimization has its limits, and the JVM adds its own limitations on top of those, which aren&#8217;t the same as in other targets such as Scala.js.

In this talk, I&apos;ll discuss:
- what bytecode is, and how the JVM interprets and compiles it;
- a high-level view of optimizations, including inlining, store-load elimination, and so on;
- how the optimizer is implemented, and what consequences this has on the optimizations it performs;
- what developers can and cannot expect from the Scala compiler and the JVM; and
- how the Scala optimizer could improve in the future.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/8RMYG9/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/8RMYG9/feedback/</feedback_url>
            </event>
            
        </room>
        <room name='Palais Atelier' guid='18a194b0-56df-5c0c-baaf-51d88c93f940'>
            <event guid='9452a498-1335-5813-91db-cb8ec289107f' id='99869' code='R87B7Z'>
                <room>Palais Atelier</room>
                <title>Securing Typelevel: Lessons from the GitHub SOS Fund</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-12T10:30:00+02:00</date>
                <start>10:30</start>
                <duration>00:30</duration>
                <abstract>Typelevel participated in the **GitHub Secure Open Source Fund** this year. This talk shares what we learned, what we are now doing to secure the Typelevel ecosystem, and **how you can improve security in your own projects**. We will also briefly discuss the requirements of the new EU Cyber Resilience Act.</abstract>
                <slug>scala26-99869-securing-typelevel-lessons-from-the-github-sos-fund</slug>
                <track></track>
                
                <persons>
                    <person id='99282'>Antonio Jimenez</person>
                </persons>
                <language>en</language>
                <description>**Open source security has never mattered more.** In the last few years we have lived through Log4Shell, the xz backdoor, and a steady stream of npm and PyPI supply-chain attacks. AI is now being pointed at codebases to discover exploits at machine speed, and regulators have noticed: The EU&apos;s **Cyber Resilience Act** took its first effect in September 2026.

Earlier this year, Typelevel was selected for the **GitHub Secure Open Source Fund**, a three-week intensive run by the GitHub Security Lab to help critical open source projects improve their security posture. We covered security advisories and incident response, threat modeling, hardening GitHub Actions, CodeQL, fuzzing and the security implications of AI and LLM tooling. This talk shares that work in three layers.

**First, what we learned in the program:** the practices, the tooling, the homework and how any project, open source or internal, can apply them.

**Second, what Typelevel is now doing across its ecosystem.** Some of these practices pre-dated the program, but the fund gave us the structure to review, formalise, and apply them consistently. We are now rolling out a shared baseline of repository settings across all Typelevel projects: private vulnerability reporting enabled, code scanning, secret scanning, MFA enforced for maintainers. We have also reviewed and updated the security documentation: an incident response plan, a threat model outline, and a fresh look at project licenses. We will also walk through how Typelevel handles a CVE end-to-end &#8212; from a private vulnerability report landing in our inbox, through coordinated disclosure, to the published advisory and patched release.

**Third, the EU Cyber Resilience Act,** which was adopted in late 2024 and entered into force on 10 December 2024. Its first wave of obligations &#8212; mandatory reporting of actively exploited vulnerabilities and severe incidents to ENISA and national authorities &#8212; has applied since **11 September 2026**. Any company placing a Scala-based product on the EU market now falls under the regulation, and their compliance story has to account for every dependency they ship. We will share what Typelevel is working through as a foundation that sustains critical open source, and what that means for downstream users.

If you maintain an open source Scala library, ship a Scala service into production, or depend on the Typelevel stack, you will leave with **a checklist, a clearer view of what&apos;s coming and a working model for handling vulnerabilities** when they show up.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/R87B7Z/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/R87B7Z/feedback/</feedback_url>
            </event>
            <event guid='c0385290-54d0-5caa-ab6b-aa7d86957901' id='99249' code='SEEJRS'>
                <room>Palais Atelier</room>
                <title>How OOP Earned Our Trust and Let Us Down</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-12T11:20:00+02:00</date>
                <start>11:20</start>
                <duration>00:30</duration>
                <abstract>Object-oriented programming helped shape modern software engineering &#8212; but also gave us shared mutable state, fragile hierarchies, and accidental complexity. Using real Scala adoption stories, this talk explores why legacy OOP thinking fails and how functional principles help teams build simpler systems.</abstract>
                <slug>scala26-99249-how-oop-earned-our-trust-and-let-us-down</slug>
                <track></track>
                
                <persons>
                    <person id='98706'>Pavel Kozlov</person>
                </persons>
                <language>en</language>
                <description>Object-oriented programming dominated software development for decades. It improved code reuse, abstraction, and modelling, and many developers &#8212; myself included &#8212; started their careers with it. But over time, the same ideas often produced systems that became difficult to reason about: shared mutable state, deep inheritance trees, overengineered patterns, and growing technical debt.

In this talk, I&#8217;ll share lessons from real-world Scala adoption projects where the biggest challenge was not learning a new language, but bringing existing habits into a different paradigm. Instead of embracing immutability, pure functions, and explicit effects, teams often recreated familiar OOP architectures with shinier syntax &#8212; and repeated the same mistakes.

Through practical examples we&#8217;ll examine how good engineering intentions can still lead to systems that are harder to maintain and evolve.

Finally, I&#8217;ll show how functional programming principles can help teams write simpler and more sustainable software &#8212; not only in Scala, but across modern language ecosystems. Attendees will leave with practical ideas for reducing accidental complexity and avoiding common overengineering traps.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/SEEJRS/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/SEEJRS/feedback/</feedback_url>
            </event>
            <event guid='b0292298-aa7f-533f-ad66-85a9e0c5a688' id='99800' code='WQVZSC'>
                <room>Palais Atelier</room>
                <title>Quality Pipelines for Generative AI</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-12T14:10:00+02:00</date>
                <start>14:10</start>
                <duration>00:30</duration>
                <abstract>How do you achieve reliable results from stochastic AI models? This talk presents practical techniques for building quality pipelines around generative AI that improve output quality before human review begins, making more effective use of limited human time and attention.</abstract>
                <slug>scala26-99800-quality-pipelines-for-generative-ai</slug>
                <track></track>
                
                <persons>
                    <person id='99232'>Bill Venners</person>
                </persons>
                <language>en</language>
                <description>Generative AI can generate useful content at extraordinary speed, but the quality and reliability of that output remain uneven. Raw AI output can contain subtle errors, inconsistencies, weak explanations, or questionable engineering choices. Human review remains essential, but once AI can generate content at scale, human attention itself becomes the bottleneck.

This talk presents an engineering approach to improving the quality of generative AI output before humans enter the loop. Rather than treating AI as a standalone assistant, we can build &#8220;quality pipelines&#8221; around it using deterministic programs, repeatable workflows, structured review loops, iterative refinement, and layered human vetting.

As a case study, I&#8217;ll describe work done for an STA (Sovereign Tech Fund) Scala Center project that focused on improving the documentation of the Scala standard library. We wrote Scala programs that inserted TODO markers into `.scala` source files where Scaladoc was missing. We then used long-running Scala scripts to orchestrate an AI-driven workflow that generated documentation, reviewed generated text, produced structured feedback, and iteratively refined the results one file at a time before multiple stages of human review.

In this talk, you will learn practical approaches to building quality pipelines around generative AI, including deterministic orchestration, structured review loops, iterative refinement, and layered human vetting. The session will focus on applying traditional software-engineering ideas to AI systems to achieve the quality you want while making the most effective use of the precious resource of human attention.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/WQVZSC/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/WQVZSC/feedback/</feedback_url>
            </event>
            <event guid='6b09ebb0-7a96-5656-bf64-b20c008367f1' id='99899' code='9UMGZA'>
                <room>Palais Atelier</room>
                <title>On Folding</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-12T15:00:00+02:00</date>
                <start>15:00</start>
                <duration>00:30</duration>
                <abstract>Where does computation live? In origami, it lives in a paper crease. We build a functional crease pattern generator in Scala to explore what origami teaches us about programs. The insight is material before it is mathematical: pure functional programming emerges naturally from the physics of folding.</abstract>
                <slug>scala26-99899-on-folding</slug>
                <track></track>
                
                <persons>
                    <person id='99312'>Johanna Odersky</person>
                </persons>
                <language>en</language>
                <description>This talk uses origami as a concrete, geometric setting for ideas that often stay abstract. We walk through the implementation of a crease pattern generator in Scala: a program that takes a set of folding rules and produces the geometric blueprint for an origami model. The patterns we generate, we fold into physical objects.
Along the way, the talk covers how to model a physical system as immutable data and how to encode mathematical laws as type constraints, so the compiler rejects invalid states. We are not using functional programming as a convenient tool. Instead, we are making the argument that origami is a form of computation, and that the math enforcing which folds are physically valid is a type system.
The audience will leave with a concrete example of type-driven design applied to a real domain, an intuition for why immutability and pure functions are not just good practice but sometimes the only model that fits, and (in the best case) the realisation that computation can live anywhere. Even in a sheet of paper.
This talk is aimed at beginners and experienced Scala developers alike. Its goal is less to close things down than to open them up.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/9UMGZA/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/9UMGZA/feedback/</feedback_url>
            </event>
            <event guid='9d312ef5-b1b2-59d4-98ad-7d774e1285a4' id='99789' code='JQPA8G'>
                <room>Palais Atelier</room>
                <title>Back to the roots - VirtusLab Scala Stack</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-12T15:50:00+02:00</date>
                <start>15:50</start>
                <duration>00:30</duration>
                <abstract>Scala is evolving to be more welcoming than ever. Explore the VirtusLab Scala Stack, an innovative toolkit that combines Scala 3 and Project Loom to champion direct-style programming by making concurrency more intuitive. With libraries like Ox and Tapir, the entry barrier is lowered, inviting new developers to build robust, scalable apps.&#8203;</abstract>
                <slug>scala26-99789-back-to-the-roots-virtuslab-scala-stack</slug>
                <track></track>
                
                <persons>
                    <person id='99221'>Jacek Kunicki</person>
                </persons>
                <language>en</language>
                <description>Scala was always meant to be simple, safe, and robust. It was designed to &quot;scale&quot; from short programs to big, efficient solutions. Features like higher-kinded types, the for-comprehension syntactic sugar, and Futures enabled efficient concurrency. Along the way, Scala&#8217;s sophisticated type system enabled the development of functional programming ecosystems around IO monads. This introduced principles such as referential transparency for scalability and fearless refactoring. But there was a price to pay: a steep learning curve and a reputation for complexity. These factors discourage new developers. 

Today, we have a solution and a way to attract new developers to Scala. The VirtusLab Scala Stack is a complete stack that combines established Scala libraries with some innovation from new ones, focusing on simple Scala through direct style. VirtusLab provides enterprise-grade support for libraries, tools, and the language itself.&#8203;

Thanks to VirtusLab Scala Stack, programmers can forget about abusing for-comprehension. Eager Futures and lazy IO monads no longer creep throughout the codebase. Developers can use the style familiar from other languages and ecosystems. This approach is supported by a strong type system together with resource safety. Could this be a new opening for Scala application development?&#8203;

During the talk, I will walk you through examples of using different libraries from the VirtusLab Scala Stack family, showcasing what they look like in direct style and how they combine, resulting in simple-to-write and read yet robust and powerful code.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/JQPA8G/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/JQPA8G/feedback/</feedback_url>
            </event>
            <event guid='22874fd1-b54b-50d0-9e9b-202e3050f71c' id='99831' code='VJWHRZ'>
                <room>Palais Atelier</room>
                <title>Teaching Software Architecture using Scala</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-12T16:40:00+02:00</date>
                <start>16:40</start>
                <duration>00:30</duration>
                <abstract>At Active Group, we have taught more than 30 three-day trainings on Functional Software Architecture since 2019, mostly to audiences with little or no prior exposure to functional programming.  For the examples, we use Scala or Haskell. I report on the constraints, successes, and learnings of this course.</abstract>
                <slug>scala26-99831-teaching-software-architecture-using-scala</slug>
                <track></track>
                
                <persons>
                    <person id='99254'>Michael Sperber</person>
                </persons>
                <language>en</language>
                <description>Since 2019, the International Software Architecture Qualification board has featured a three-day curriculum for Functional Software Architecture (&quot;FUNAR&quot;) as part of its Advanced Level certification.  In our training implementing the curriculum, we work through exercises examples written in Scala (alternatively Haskell), among them a complete web application.  The short duration of the course (which is usually preceded by a one-day introduction to functional programming) puts significant constraints on how much and what it can cover, but also poses didactic challenges as all material must be explainable and carry over to other functional languages.  Over the past six years, we have continually assessed the effectiveness of the course and made many iterative improvements.  I&apos;ll report on our experience and draw some inferences not just about teaching but also about viable software architecture in Scala and what its advantages and differences are with traditional software architecture.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/VJWHRZ/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/VJWHRZ/feedback/</feedback_url>
            </event>
            
        </room>
        <room name='Frannz Salon: Lab 1' guid='a5b07f3a-ab90-5efe-b5c0-29df8a67529e'>
            <event guid='c638618c-b455-5887-a188-610986018410' id='99860' code='QXAPMM'>
                <room>Frannz Salon: Lab 1</room>
                <title>A Distributed System On Fire: Diagnosing Failures with otel4s</title>
                <subtitle></subtitle>
                <type>Interactive labs</type>
                <date>2026-10-12T11:00:00+02:00</date>
                <start>11:00</start>
                <duration>02:00</duration>
                <abstract>Learn to **diagnose realistic production failures** in a distributed Typelevel streaming platform. Through a curated set of incidents, you will debug failures using telemetry and iteratively improve observability through manual instrumentation with `otel4s`, leaving with a practical mental model for **telemetry-driven debugging in Scala**.</abstract>
                <slug>scala26-99860-a-distributed-system-on-fire-diagnosing-failures-with-otel4s</slug>
                <track></track>
                
                <persons>
                    <person id='99282'>Antonio Jimenez</person><person id='99393'>Maksym Ochenashko</person>
                </persons>
                <language>en</language>
                <description>This interactive lab puts you in front of a running distributed streaming platform built on the Typelevel stack (`cats-effect`, `fs2`, `http4s`, `smithy4s`, `skunk`, `otel4s`) and asks you to **diagnose what just broke**.

The system is realistic: several microservices communicating over HTTP, an `fs2` traffic generator, Postgres, and a full observability stack (metrics, traces and logs) already wired up with `otel4s` and visualized with Grafana dashboards. 

Everything is pre-built, pre-deployed, and runs locally with a single command. If you would rather not run anything locally, the lab will be fully available as a GitHub Codespace.

We will work through a curated series of incidents covering two flavours of production pain:

- **System-wide degradation:** A big chunk of the platform slows down or stops working for everyone.
- **Tail-latency mysteries:** most users are fine, but a small fraction see slow or failing requests.

For each incident, you will get the symptoms, access to the running system and its observability backend, and time to investigate. We will guide you through a repeatable diagnosis pipeline &#8212; **metrics &#8594; traces &#8594; logs** &#8212; that scales from trivial bugs to genuinely tricky ones. At least one scenario is designed so that default instrumentation is not enough: you will add your own spans and attributes with `otel4s` to narrow down the problem.

After each round we will walk through the diagnosis together and discuss what telemetry made visible that logs alone would not have.

By the end you will have a practical mental model for **telemetry-driven debugging in Scala**, hands-on familiarity with `otel4s` in a realistic distributed stack, and a take-home repository you can run locally to keep practising.

**Setup requirements:** Docker, sbt, java 17+ or use github codespace.

**Nice to have (but not required):**
- Comfortable working with Scala and Cats Effect.
- Familiarity with the basic ideas of distributed systems.

---
This session will not be livestreamed or recorded.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/QXAPMM/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/QXAPMM/feedback/</feedback_url>
            </event>
            
        </room>
        <room name='Frannz Salon: Lab 2' guid='84b26faf-709a-5129-8f97-9b3ca157cf44'>
            <event guid='ea15a982-a1b8-50f7-aa4c-1cc7aedfb9c9' id='99634' code='RC939C'>
                <room>Frannz Salon: Lab 2</room>
                <title>Building Real Applications in Scala Native</title>
                <subtitle></subtitle>
                <type>Interactive labs</type>
                <date>2026-10-12T11:00:00+02:00</date>
                <start>11:00</start>
                <duration>02:00</duration>
                <abstract>Scala Native is great! It creates small and fast binaries, and can access all operating systems features. This workshop will introduce working with Scala Native by building a terminal based application. We&apos;ll learn how to setup and build Native code, call into with system libraries, and use the archaic but powerful features of the terminal.</abstract>
                <slug>scala26-99634-building-real-applications-in-scala-native</slug>
                <track></track>
                
                <persons>
                    <person id='98419'>Noel Welsh</person>
                </persons>
                <language>en</language>
                <description>**Overview**

Scala Native is a powerful tool, but underappreciated. The goal of this workshop is to show you how to work with Scala Native, and some of the unique features it unlocks. In particular the workshop will cover:

1. Building tools with Scala Native, including project setup, building executables, and using the FFI.
2. Knowledge of working with the terminal, at both a low-level (ANSI escape codes and C APIs), and a high-level (creating terminal user interfaces using a framework)
3. An appreciation of the ecosystem that is available in Scala Native.

The core of this workshop will be building an application with a terminal user interface. The exact kind of application is to be determined; current ideas are:

- an HTTP client like [Slumber](https://slumber.lucaspickering.me/);
- a Bluesky client; or
- a todo list.

You must have Scala Native installed before the workshop. Scala Native requires [some additional installation steps](https://scala-native.org/en/latest/user/setup.html) beyond installing just Scala. Furthermore, the operating system specific features we will use are only available in Unix-like systems (Linux or MacOS). If you are using Windows then you must be able to use [WSL](https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux).


**Details**

1. Creating a sbt project that uses Scala Native. The Scala Native plugin, cross-project setup and its advantages. Building and linking. Finding the executable.
2. Interacting with the terminal. Basic ANSI escape codes. Features only available via operating system calls (tcgetattr, tcsetattr, ioctl). Using Scala Native&apos;s existing OS bindings.
3. Using the FFI. Binding a C function in Scala Native. C types, memory allocation. Writing C stub code to produce the value of constants.
4. Building the application. We&apos;ll switch to using [Terminus](https://www.creativescala.org/terminus/) so we don&apos;t have to build everything from scratch. This will allow us to explore the Scala Native ecosystem (e.g. Cats Effect.)

---
This session will not be livestreamed or recorded.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/RC939C/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/RC939C/feedback/</feedback_url>
            </event>
            
        </room>
        <room name='Frannz Salon: Lab 3' guid='a88b6ed8-8a1e-5452-a8c6-e8b03a7f8138'>
            <event guid='e9524ca2-042a-5016-bf94-11ce4dbaca13' id='99385' code='DYQWSL'>
                <room>Frannz Salon: Lab 3</room>
                <title>sbt 2.0 lab</title>
                <subtitle></subtitle>
                <type>Interactive labs</type>
                <date>2026-10-12T11:00:00+02:00</date>
                <start>11:00</start>
                <duration>02:00</duration>
                <abstract>Come talk to the sbt maintainers at sbt 2.0 lab. The lab session will be a mix of prepared problems and build clinic to discuss porting your build to sbt 2.</abstract>
                <slug>scala26-99385-sbt-2-0-lab</slug>
                <track></track>
                
                <persons>
                    <person id='98838'>Eugene Yokota</person><person id='98715'>Anatolii Kmetiuk</person>
                </persons>
                <language>en</language>
                <description>This lab session will be conducted by current sbt maintainers Eugene and Anatolii.

### Summary
We&apos;ll prepare some example problems people can go through to experience the caching issues etc that we can finish in an hour. The next hour would be more open-ended discussion or Q&amp;A about porting existing build to sbt 2.

### Relevance
Having an in-person clinic time with the project maintainers makes conference a fruitful experience. This might also be an opportunity where people can discuss closed-sourced repo.

---
This session will not be livestreamed or recorded.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/DYQWSL/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/DYQWSL/feedback/</feedback_url>
            </event>
            
        </room>
        
    </day>
    <day index='2' date='2026-10-13' start='2026-10-13T04:00:00+02:00' end='2026-10-14T03:59:00+02:00'>
        <room name='Kesselhaus' guid='73eafa1d-cf48-5741-8c18-5e2b69b6b1e5'>
            <event guid='94196177-63ca-5728-a546-338802552dc0' id='106254' code='CCL7JZ'>
                <room>Kesselhaus</room>
                <title>Welcome back!</title>
                <subtitle></subtitle>
                <type>#ScalaDays</type>
                <date>2026-10-13T09:00:00+02:00</date>
                <start>09:00</start>
                <duration>00:15</duration>
                <abstract>Join us as we kick off Day 2 of ScalaDays 2026!</abstract>
                <slug>scala26-106254-welcome-back</slug>
                <track></track>
                
                <persons>
                    
                </persons>
                <language>en</language>
                
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/CCL7JZ/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/CCL7JZ/feedback/</feedback_url>
            </event>
            <event guid='47f6529a-17a7-5529-abd4-5ecad45d298f' id='105049' code='J7ABJP'>
                <room>Kesselhaus</room>
                <title>Future of Programming</title>
                <subtitle></subtitle>
                <type>Keynote</type>
                <date>2026-10-13T09:15:00+02:00</date>
                <start>09:15</start>
                <duration>00:45</duration>
                <abstract>What future of programming to do we want? How do we build it?</abstract>
                <slug>scala26-105049-future-of-programming</slug>
                <track></track>
                
                <persons>
                    <person id='104120'>Nada Amin</person>
                </persons>
                <language>en</language>
                
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/J7ABJP/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/J7ABJP/feedback/</feedback_url>
            </event>
            <event guid='e09f3fd1-4a1f-55d7-8b60-d9dcd1062894' id='99732' code='ACGLZW'>
                <room>Kesselhaus</room>
                <title>A Typelevel Prospectus</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-13T10:30:00+02:00</date>
                <start>10:30</start>
                <duration>00:30</duration>
                <abstract>Learn more about Typelevel, the open source organization that stewards development of projects such as Cats Effect, http4s, and Circe, and offers one of the most comprehensive cross-platform stacks for the Scala ecosystem. In this talk, you will discover the people and processes driving this work and how you can participate.</abstract>
                <slug>scala26-99732-a-typelevel-prospectus</slug>
                <track></track>
                
                <persons>
                    <person id='96989'>Arman Bilge</person>
                </persons>
                <language>en</language>
                <description>Typelevel as an organization has grown a lot in the last year, since we became a nonprofit Foundation. I am excited to share with the broader Scala community about everything we&apos;ve accomplished, where we are going, and how they can become involved.

Three goals for this talk are to:
1. Give an overview of who Typelevel is and what we do.
2. Provide transparency into our governance, community, and technical operations.
3. Share opportunities and invite the community to become involved.

Along the way, I will briefly cover specific projects and initiatives in more detail, to highlight examples and success stories.

More broadly, perhaps this talk will also offer insights about how to foster community and sustainable growth in open source.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/ACGLZW/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/ACGLZW/feedback/</feedback_url>
            </event>
            <event guid='658f810b-8baf-5f5e-a455-c9c4800d5c97' id='98645' code='RSEGGV'>
                <room>Kesselhaus</room>
                <title>Where Scala meets AI</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-13T11:20:00+02:00</date>
                <start>11:20</start>
                <duration>00:30</duration>
                <abstract>The AI revolution raises questions about the utility of various technologies, especially programming languages. And when it comes to developer experience, Scala might have just the right answers. We&apos;ll take a tour of how to use Scala efficiently for and with AI.</abstract>
                <slug>scala26-98645-where-scala-meets-ai</slug>
                <track></track>
                
                <persons>
                    <person id='98138'>Adam Warski</person>
                </persons>
                <language>en</language>
                <description>The AI revolution raises questions about the utility of various technologies, especially programming languages. And when it comes to developer experience, Scala might have just the right answers.

We&apos;ll take a tour of how to use Scala efficiently for and with AI. We&apos;ll start by augmenting existing Scala development workflows with AI, leveraging Metals MCP and Cellar.

Next, we&apos;ll teach AIs to write better Scala and more functional code. A short Scala skill makes a whole lot of difference in the quality of the generated code. Here we&apos;ll focus on the direct-style-Scala skill we&apos;ve been developing, highlighting the main challenges that AI faced in our experiments.

We&apos;ll finish by looking at applications: using Scala to orchestrate coding agents and to orchestrate arbitrary business workflows. These are two broad categories. First, we&apos;ll take a hands-on look at Orca, which offers an API for setting up deterministic, AI-driven development flows.

For the second, we&apos;ll see how sttp-ai and chimp work together to provide the necessary Scala tooling to use AI models in your applications: talking to OpenAI/Claude APIs, running an agentic loop, using structured inputs &amp; outputs. One theme will be constant: leaning on type safety and Scala&apos;s toolchain to deliver business value not only faster, but also with more reliability.

In each case, we&apos;ll show where Scala is better suited than alternatives for the problem at hand - and where it loses to the competition. Our goal will be to answer the question: in the age of AI, where does Scala have the upper hand</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/RSEGGV/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/RSEGGV/feedback/</feedback_url>
            </event>
            <event guid='75310aa2-bbf7-50b6-aa6d-5386e606706f' id='97324' code='H9VZ79'>
                <room>Kesselhaus</room>
                <title>Stop testing, start proving</title>
                <subtitle></subtitle>
                <type>Lightning Talk</type>
                <date>2026-10-13T12:10:00+02:00</date>
                <start>12:10</start>
                <duration>00:05</duration>
                <abstract>Tests and types are our correctness gates. But who verifies the gates themselves? With agentic codegen flooding our pipelines with code we didn&apos;t write, that question has never been more dangerous to ignore.

In this talk, we explore how theorem provers complement existing practices, adding mathematical certainty where it matters most.</abstract>
                <slug>scala26-97324-stop-testing-start-proving</slug>
                <track></track>
                
                <persons>
                    <person id='96936'>Valentin Bergeron</person>
                </persons>
                <language>en</language>
                <description>Tests and types are our correctness gates. Yet nobody verifies the gates themselves.
With agentic codegen flooding our pipelines at a scale we can&apos;t keep up with, that gap has never been more dangerous to ignore.

This talk is about industrializing formal verification: taking theorem provers from an academical tool to a practical, deployable tool for production engineering teams.

We&apos;ll look at how to identify the business logic that does: the invariants, state machines, and domain rules where a bug is not just an incident but a liability, how to scope verification to where it pays off and what are its limits.

Then we will see how to ship proven code. We will present ways to deploy verified code across backends, frontends, event-driven systems, and even embedded firmware, and what changes in your architecture and codebase when correctness is a certitude.

While writing proofs has been hard, writing a theorem statement is not. We&apos;ll see how AI-augmented workflows let you specify what must be true, and let the machine figure out why it is. The result is a new kind of correctness gate: interfaces, in both the type-theory and software sense, that are proven contracts, not assumptions.

We started by questioning our gates. We&apos;ll end with better ones.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/H9VZ79/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/H9VZ79/feedback/</feedback_url>
            </event>
            <event guid='1fe5e904-0b4b-51c7-9c26-ca341c155fe9' id='100007' code='T3HHRC'>
                <room>Kesselhaus</room>
                <title>Scala OSS vs. the LLM Era</title>
                <subtitle></subtitle>
                <type>Lightning Talk</type>
                <date>2026-10-13T12:15:00+02:00</date>
                <start>12:15</start>
                <duration>00:05</duration>
                <abstract>LLMs are changing how people contribute to open source - but are they really helping? In this talk, we&#8217;ll look at compiler maintenance in the age of AI-generated PRs, issues and comments, and ask what maintainers gain, lose, and how the rules of contribution are changing.</abstract>
                <slug>scala26-100007-scala-oss-vs-the-llm-era</slug>
                <track></track>
                
                <persons>
                    <person id='99396'>Patryk Zieli&#324;ski</person>
                </persons>
                <language>en</language>
                <description>LLMs have lowered the barrier to contributing to open source, but for maintainers the picture is more complicated than &#8220;more contributions = better&#8221;. This talk looks at how the maintenance of open source projects, including the Scala 3 compiler, changes when AI-generated issues, comments, PRs and even design proposals start showing up.

We will walk through a real-looking low-effort LLM contribution and compare it with an actual fix. The interesting part is not whether the code compiles, but whether it solves the real compiler bug - or merely patches the single reproduction case that was given to the model.

From there, we will zoom out to the broader stream of AI-generated open source activity: confident but wrong explanations, noisy GitHub comments, suspicious proposals, bot-authored pull requests. These examples show how much of maintainer work is not just writing code, but understanding intent, verifying claims, and deciding what is worth trusting.

This is not a talk about mocking AI users. Many of us use LLMs every day, sometimes very effectively. The goal is to show what maintainers now have to review, verify, and make sense of - and why it is surprisingly hard to tell whether the LLM era is making open source maintenance easier, harder, or simply different.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/T3HHRC/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/T3HHRC/feedback/</feedback_url>
            </event>
            <event guid='ad883251-ed38-5f7d-8ad9-b35e2bb41569' id='100022' code='KKPB93'>
                <room>Kesselhaus</room>
                <title>AI on your desktop: secure automation using capture checking</title>
                <subtitle></subtitle>
                <type>Lightning Talk</type>
                <date>2026-10-13T12:20:00+02:00</date>
                <start>12:20</start>
                <duration>00:05</duration>
                <abstract>Local AI assistants like OpenClaw run with shell, browser, and credentials. Open chats make prompt injection a massive leak risk. Docker fails; approvals kill UX. TACIT opened the way: capture checking makes leaking information flows uncompilable. 

In this talk, we will demo assistant security on browser automations against exploits.</abstract>
                <slug>scala26-100022-ai-on-your-desktop-secure-automation-using-capture-checking</slug>
                <track></track>
                
                <persons>
                    <person id='99406'>Salim Belkhir</person>
                </persons>
                <language>en</language>
                <description>In this highly practical, demo-driven session, we will move from an exploit to a complete type-safe wrap:

## 1. The Live Exploit
We will reproduce a live prompt-injection attack against an unsandboxed OpenClaw instance. We&#8217;ll show how a benign-looking incoming chat message tricks the agent into harvesting host tokens and broadcasting them to an external endpoint.

## 2. The Zero-Rewrite MCP Wrap
We will walk through a 5-step architectural setup that intercepts agent actions over local MCP, disables built-in shell/file/network access, and routes all operations through TACIT&apos;s capability-typed REPL.

## 3. Under the Hood: Scala 3 Capture Checking
We&#8217;ll tour the bleeding-edge static analysis machinery making this possible. Files under classified paths are automatically wrapped in a `Classified[String]` container. We will look at how the trait API leverages Scala 3 capture checking:
```scala
trait Classified[+T]:
  def map[B](op: T -&gt;{any.rd} B): Classified[B]
```
The pure `-&gt;{any.rd}` function arrow enforces at compile time that the mapping operation captures no escaping capabilities. You can safely map over the data or pass it to a trusted local LLM via `chat(Classified[String])`, but passing it to a cloud-facing `chat(String)` or shipping it over HTTP will fail to compile.

## 4. Scaling Beyond OpenClaw
Because our security lever is the standard MCP protocol rather than application-specific code, this exact pattern generalizes. We will demonstrate the identical wrap instantly safeguarding other popular tools like Open Interpreter, Goose, and Cline.
## 5. Plugging the Browser Side-Channel
A wrap that only covers standard I/O leaves the web browser open as an escape hatch&#8212;an injected agent could easily navigate to local file paths or screenshot a sensitive app and ship the raw image to a cloud API. We will debut an origin-scoped `BrowserPermission` capability (built on Playwright) that introduces `Classified[Page]` and `Classified[Image]` boundaries. We will live-extend TACIT with under 30 lines of code to render this advanced browser leak path completely uncompilable.
Key Takeaways
You will leave this talk with:

1. **The MCP Security Blueprint**: A concrete, repeatable recipe for wrapping and securing any MCP-compliant agent without touching its source code.

2. **A Shift from Containment to Proof**: A clear understanding of why traditional runtime sandboxing (Docker/WASM) cannot stop cognitive LLM exploits, and how information-flow control plugs the gap.

3. **Production-Ready Capabilities**: A practical framework for shipping autonomous AI tools to non-technical users without risking leaked keys or compromised environments.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/KKPB93/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/KKPB93/feedback/</feedback_url>
            </event>
            <event guid='a09a34f4-1bd8-5a19-ae0a-19f1b9619249' id='99313' code='8KALEK'>
                <room>Kesselhaus</room>
                <title>DimWit - Tensor programming with wit</title>
                <subtitle></subtitle>
                <type>Lightning Talk</type>
                <date>2026-10-13T12:25:00+02:00</date>
                <start>12:25</start>
                <duration>00:05</duration>
                <abstract>We present DimWit, a system for writing readable numerical and machine learning code. DimWit&apos;s core feature is a trait-based implementation of the named tensor notation, which improves readability and type-safety compared to standard tensors. We illustrate how to write machine learning models using DimWit, and discuss our experience training GPT-2.</abstract>
                <slug>scala26-99313-dimwit-tensor-programming-with-wit</slug>
                <track></track>
                
                <persons>
                    <person id='98782'>Benjamin Meyer</person><person id='104229'>Marcel L&#252;thi</person>
                </persons>
                <language>en</language>
                <description>In this session, we motivate why typed tensor computations are needed in machine learning and how named tensor notation helps us to write readable and type-safe code. We discuss the ongoing efforts in the Python community and argue that Scala already today can deliver what many Python library authors would like Python to support eventually. We present DimWit, a Scala library that implements named tensor notation as its core abstraction. We show how DimWit, which is built on top of Python&#8217;s JAX, can achieve efficiency on par with state-of-the-art libraries. We will also discuss our efforts to train GPT-2 (a 124M parameters) from scratch in Scala. We hope that this talk will show that Scala can be a better alternative to Python for expressing numerical computation and writing programs that are easier to reason about.

Repository: https://github.com/dimwit-dev/dimwit</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/8KALEK/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/8KALEK/feedback/</feedback_url>
            </event>
            <event guid='4c5364cc-d7e3-5b8d-a181-8e8fd74ac7e2' id='106252' code='HMWUPF'>
                <room>Kesselhaus</room>
                <title>Does language choice even matter in the AI era?</title>
                <subtitle></subtitle>
                <type>Panel</type>
                <date>2026-10-13T14:10:00+02:00</date>
                <start>14:10</start>
                <duration>00:45</duration>
                <abstract>In this panel, we bring software practitioners and academics together to discuss language relevance in the AI era.</abstract>
                <slug>scala26-106252-does-language-choice-even-matter-in-the-ai-era</slug>
                <track></track>
                
                <persons>
                    <person id='105376'>Martin Odersky</person><person id='104120'>Nada Amin</person><person id='96989'>Arman Bilge</person><person id='98138'>Adam Warski</person><person id='99422'>Krzysztof Romanowski</person>
                </persons>
                <language>en</language>
                <description>If AI generates, refines, and tests code, does our choice of programming language still matter? If an automated &quot;software factory&quot; can synthesize features end-to-end without (much) human supervision, shouldn&apos;t every system be written in Zig, Rust even straight to Assembly to maximize performance and minimize infrastructure costs? Or, conversely, is language choice even more critical because it directly impacts code correctness and much needed developer &amp; agent comprehension?

Host: Krzysztof Romanowski</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/HMWUPF/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/HMWUPF/feedback/</feedback_url>
            </event>
            <event guid='672dc0ef-b6c8-533f-b3e3-50aabad545cb' id='99613' code='HU3PVB'>
                <room>Kesselhaus</room>
                <title>Making the AI agents safe with Scala</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-13T15:15:00+02:00</date>
                <start>15:15</start>
                <duration>00:30</duration>
                <abstract>Everyone and their dog are building permanent AI agents, but nobody is solving the real problem - how to prevent the agent from doing something it should never, ever do while preserving its general problem-solving capability. In this talk, we will introduce the CapybaraClaw - the agent built with safety in mind that gives you the peace of mind.</abstract>
                <slug>scala26-99613-making-the-ai-agents-safe-with-scala</slug>
                <track></track>
                
                <persons>
                    <person id='99045'>&#321;ukasz Bia&#322;y</person><person id='99274'>Jakub Warcho&#322;</person>
                </persons>
                <language>en</language>
                <description>In this talk, we will introduce a project shared between EPFL and VirtusLab focused on building a production-grade, permanent AI agent based on the TACIT tool developed by Martin Odersky&apos;s team.

https://github.com/lampepfl/capybaraclaw

The talk will be composed of:

1) Introduction: We will explain what the landscape of permanent agents (like OpenClaw) looks like, what security and safety issues exist within these projects, and how that limits their implementation in serious contexts.
2) Analysis of the problem space: we will address these weaknesses by decomposing the issue to find what the nature of the problem is - generality and elasticity vs severe limitations imposed by sandboxing, what solutions are proposed by AI companies, and finally we&#8217;ll describe how TACIT and CapybaraClaw solve whole categories of these problems by using Scala&#8217;s new capture checking facilities to enforce rules while preserving utility.
3) Deep dive: We will walk through the agent&#8217;s architecture and capabilities in detail. The focus of this part is to show how Martin Odersky&#8217;s new approach unlocks stronger safety guarantees for AI agents.
4) Summary: We&#8217;ll talk about the roadmap of the project and our goals, share links and source materials (whitepapers, CTF repos where Frontier AI was used to find exploits against TACIT, etc.).

What the audience will learn: The primary benefit for attendees is the in-depth explanation of how the general and abstract system of Scala 3 capture checking and capabilities can be used productively in a use case that is much different from the usual coding.

The presenters for this talk may still change!</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/HU3PVB/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/HU3PVB/feedback/</feedback_url>
            </event>
            <event guid='a53aac73-ed8a-5b91-98b8-be5c05138762' id='99351' code='WQVK9R'>
                <room>Kesselhaus</room>
                <title>Advocacy, Funding, and Patience: The Security Audit of Scala</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-13T16:05:00+02:00</date>
                <start>16:05</start>
                <duration>00:30</duration>
                <abstract>Gain insight into how security audits are carried out on large, complex projects like Scala. Hear about how open source security advocate Open Source Technology Improvement Fund partnered with Scala maintainers to source funds, scope and manage work, and create meaningful fixes in a piece of critical software in active production.</abstract>
                <slug>scala26-99351-advocacy-funding-and-patience-the-security-audit-of-scala</slug>
                <track></track>
                
                <persons>
                    <person id='98810'>Amir Montazery</person>
                </persons>
                <language>en</language>
                <description>This presentation will describe in detail the process of acquiring, designing, and executing a security audit on Scala. A project of this size and impact requires specific, nuanced security efforts beyond the capabilities of day-to-day operations. By introducing a skilled, experienced security team with a specific scope to the code, OSTIF created a custom security audit that created meaningful outcomes for the scala organization and project. As our ecosystem experiences unprecedented supply chain attacks and hacks, thoughts have turned to how the open source community can address and prevent exploits. 

First, our presenter will go over the process of creating an audit, how funding was sourced and stakeholders brought in. Then, the steps to selecting the audit team and determining the scope of work will be discussed, as well as the best security practices a project can perform especially ahead of formal security engagements. Using direct examples from our Scala audit of 2025-2026, OSTIF will show how an audit team directly collaborates with project maintainers to refine and specify their work to Scala&#8217;s needs and functions. Moving forward, the presentation will show the issues identified by the work and the steps taken by the Scala team to fix or address them as they move forward in development. Attendees will walk away with the knowledge of how a security audit works, what it does to a project in the short and long term, and a desire to contribute to Scala&#8217;s ongoing security and development.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/WQVK9R/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/WQVK9R/feedback/</feedback_url>
            </event>
            <event guid='26da8e5f-4769-5682-a12b-eb0ca27264f0' id='99748' code='JCX8GD'>
                <room>Kesselhaus</room>
                <title>Type-Driven AI: High quality Scala code with LLM</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-13T16:55:00+02:00</date>
                <start>16:55</start>
                <duration>00:30</duration>
                <abstract>Speed without quality is debt. This talk shows how Scala&apos;s type system, combined with a multi-layer validation pipeline (compiler, linting, property tests, mutation testing, and formal verification) helped by a concepts inventory and types generation acts as a guardrail for LLM-generated code, keeping correctness non-negotiable.</abstract>
                <slug>scala26-99748-type-driven-ai-high-quality-scala-code-with-llm</slug>
                <track></track>
                
                <persons>
                    <person id='99185'>Giovanni Ruggiero</person>
                </persons>
                <language>en</language>
                <description>**DISCLAIMER**: This description and the above abstract have been partially generated by LLM

### Overview

AI coding assistants boost development speed, but without discipline they create fragile codebases. This session presents a production-tested, spec-driven workflow that uses Scala&apos;s type system and tooling ecosystem as a verification infrastructure. The final goal is to produce correct code without accumulating technical debt.

### The Six Validation Rings

The workflow is organized around six concentric rings, each catching errors the previous one cannot:

- **Ring 0 - The Compiler:** Strict flags and refined types (Iron library/Smithy IDLs) encode business constraints at the type level, rejecting invalid inputs before LLM output ever runs.
- **Ring 1 - Static Analysis:** Scalafix and WartRemover enforce functional programming discipline and architectural boundaries through custom rules, acting as machine-checkable preconditions for all subsequent rings.
- **Ring 2 - Property-Based Testing:** ScalaCheck verifies behavior correctness. LLMs generate properties better than implementations, so properties are defined first in the specs, then the implementation is generated and verified against them. Counterexamples feed back to the LLM as targeted fixes.
- **Ring 3 - Mutation Testing:** Stryker4s exposes blind spots LLMs reliably create: tests that pass the happy path but miss edge cases. A mutation score below 80% triggers reinforcement, with surviving mutants fed back as prompts.
- **Ring 4 - Formal Verification:** Stainless provides mathematical proof of correctness for pure, high-stakes logic (e.g., interest calculations), verifying all possible inputs via SMT conditions.
- **Ring 5 - Runtime Telemetry:** After deployment, otel4s monitors contract conformance and Daut checks temporal event sequences against state machine properties. Violations automatically feed back into Ring 2, tightening the safety net over time.

A concepts inventory is added in the loop to prevent the LLM from reinventing the wheel. Further, a Type Driven Development methodology is enforced by generating first the types and then the code fulfilling them.

### Why It Matters

The perceived trade-off between speed and quality is false. Scala&apos;s tools turn quality into a correctness mechanism: sealed ADTs enable exhaustiveness checks, refined types make constraints enforceable, and pure functions enable formal verification. 

### What Attendees Will Learn

- How to structure specs using EARS semi-formal language as a single source of truth
- How to configure Scala&apos;s compiler and linting tools as automated guardrails
- How to use property-based testing as a first-class generation target
- How to apply mutation testing and formal verification where they add most value
- How to close the loop between production runtime behavior and static verification using a workflow used daily on a 60K-line Scala codebase</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/JCX8GD/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/JCX8GD/feedback/</feedback_url>
            </event>
            <event guid='83a68b37-cd1f-5ce7-9872-5531d8f6eb18' id='106253' code='TDVER9'>
                <room>Kesselhaus</room>
                <title>Closing session Day 2</title>
                <subtitle></subtitle>
                <type>#ScalaDays</type>
                <date>2026-10-13T17:45:00+02:00</date>
                <start>17:45</start>
                <duration>00:15</duration>
                <abstract>Join us as we wrap up Scala Days 2026!</abstract>
                <slug>scala26-106253-closing-session-day-2</slug>
                <track></track>
                
                <persons>
                    
                </persons>
                <language>en</language>
                
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/TDVER9/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/TDVER9/feedback/</feedback_url>
            </event>
            
        </room>
        <room name='Maschinenhaus' guid='841323ee-f609-5b3d-aa4a-96586dcef074'>
            <event guid='141e77a0-6233-5218-91b2-5025b0d2554c' id='99502' code='H8NAKF'>
                <room>Maschinenhaus</room>
                <title>Report: where are we going with the Standard Library?</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-13T10:30:00+02:00</date>
                <start>10:30</start>
                <duration>00:30</duration>
                <abstract>This is an experience report on the process and progress of improving the Standard Library, Scala Toolkit and other core Scala modules under the resources provided by the Sovereign Tech Agency.</abstract>
                <slug>scala26-99502-report-where-are-we-going-with-the-standard-library</slug>
                <track></track>
                
                <persons>
                    <person id='98954'>Jamie Thompson</person>
                </persons>
                <language>en</language>
                <description>Depending on circumstantial changes and progress reached by October the precise contents could change.
However the talk would cover the process of delivering on the project: i.e. on which areas we put focus; limitations (i.e. when you have to say no to &quot;can&apos;t you just do X&quot;), and hopes for future. For example beyond concrete code proposals/delivered changes, there is plenty of material to draw from such as various community proposals, an appriasal of the state of the library ecosystem, report contents for the STA (including a roadmap of ideas that may not land but were at least considered.)</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/H8NAKF/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/H8NAKF/feedback/</feedback_url>
            </event>
            <event guid='5789fe05-c946-5b57-99f5-14d6d0a84f31' id='100165' code='X9YKXK'>
                <room>Maschinenhaus</room>
                <title>First-class Logical Refinement Types for Scala</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-13T11:20:00+02:00</date>
                <start>11:20</start>
                <duration>00:30</duration>
                <abstract>What if assertions such as `x &gt; 0` were part of the type system? We present a prototype implementation of *logical refinement types for Scala*: types like `{x: Int | x &gt; 0}`. In our system, refinement types are first-class: they can be nested, used as type arguments, and related by subtyping. We demonstrate the system through concrete examples.</abstract>
                <slug>scala26-100165-first-class-logical-refinement-types-for-scala</slug>
                <track></track>
                
                <persons>
                    <person id='99533'>Matt Bovel</person>
                </persons>
                <language>en</language>
                <description>This talk introduces *logical refinement types* for Scala 3 as a first-class language feature, backed by a working compiler prototype. A refinement type refines a base type `T` with a logical predicate `p(x)`, written `{x: T with p(x)}`: the set of values `x: T` for which `p(x)` holds. For example, `{x: Int with x &gt; 0}` is the type of positive integers and `{x: List[Int] with x.nonEmpty}` the type of non-empty lists.

The idea appears in many languages under different names: [*refinement types* in Liquid Haskell](https://ucsd-progsys.github.io/liquidhaskell-tutorial/Tutorial_01_Introduction.html), [*boolean refinement types* in F\*](https://fstar-lang.org/tutorial/book/part1/part1_getting_off_the_ground.html#boolean-refinement-types), [*subset types* in Dafny](https://dafny.org/latest/DafnyRef/DafnyRef#sec-subset-types), and [*subtypes* in Lean](https://lean-lang.org/doc/reference/latest/Basic-Types/Subtypes/). We call them *logical refinement types*, or *refinement types* for short, to distinguish them from Scala&apos;s existing [*refined types*](https://scala-lang.org/files/archive/spec/3.4/03-types.html#refined-types), which add members to a type rather than constrain its values with a predicate.

In short, refinement types move assertions into the type system. For the compiler to accept `e: {x: T with p(x)}`, it must prove that `p(e)` holds for every `e: T`, so `assert(p(e))` can never fail at runtime. This buys three things:

1. **No runtime cost, total guarantees.** Predicates are checked at compile time, so there is no runtime overhead, and the property holds for *all* values rather than only those a test happens to exercise.
2. **Composability.** Refinement types are ordinary types, so they nest without ceremony: `{x: Int with x &gt; 0} =&gt; String` is a function that rejects non-positive inputs, and `List[{x: Int with x &gt; 0}]` a list of positive integers.
3. **Self-documenting APIs.** Pre- and post-conditions live in the signature instead of scattered `require`/`assert` calls, which also improves IDE support and documentation.

### Syntax and Predicate Language

`{x: T with p(x)}` is the *long form*. It introduces an explicit binder `x` for the value being refined, which is useful when no name is otherwise available, for example in type aliases or return types:

```scala
type Pos = {x: Int with x &gt; 0}
def fill(n: Pos, v: Int):
  {res: List[Int] with res.size == n} = ???
```

When the value already has a name, as in a `val` or a parameter, the binder can be dropped. This *short form* reuses the existing name and desugars to the long form:

```scala
val x: Int with x &gt; 0
// desugars to:
val x: {x: Int with x &gt; 0}
```

Predicates also have to be something the compiler can reason about statically, so they must be *pure* and *terminating*. Concretely, the predicate language is a fragment of Scala: constants, stable identifiers, field selections over `val` fields, term and type applications, and constructors of case classes without initializers. Functions called from predicates are assumed pure and terminating; the prototype does not yet enforce this, so for now it is the programmer&apos;s responsibility.

### Selfification

Scala already has precise types it usually throws away: the literal `42` has singleton type `42`, but `val x = 42` widens to `Int` unless annotated as `val x: 42 = 42`. Refinement types follow the same rule: they are *not* inferred from terms by default. This keeps the types Scala assigns unchanged, preserving source compatibility and avoiding a proliferation of fine-grained types that could hurt performance.

Instead, the refinement type is written explicitly where it is wanted. When one is expected, the compiler tries to *selfify* the expression: it gives `e: T` the type `{x: T with x == e}`, lifting the expression into the type as long as it is a valid predicate.

```scala
val x: (Int with x == 42) = 42
val y: (Int with y == n + 2) = n + 2
```

### Runtime checks

When a property cannot be established statically, it can be recovered at runtime through pattern matching:

```scala
type ID = {s: String with s.matches(idRegex)}
&quot;12e7-e89b-12d3&quot; match
  case _: ID =&gt; // s matches idRegex
  case _     =&gt; // s does not match idRegex
```

When the program should simply fail if the predicate does not hold, the `runtimeChecked` method performs a dynamic check and throws otherwise.

As elsewhere in Scala, matching on erased type arguments is not supported: a `List[ID]` or an `ID =&gt; String` cannot be matched directly. For collections and similar cases, a custom [`TypeTest`](https://docs.scala-lang.org/scala3/reference/other-new-features/type-test.html) lifts the restriction.

### Subtyping

The interesting question is how to decide whether one refinement type is a subtype of another. By definition, `{x: T with p(x)}` is a subtype of `{y: S with q(y)}` when `T &lt;: S` and the predicates are related by implication: `p(x)` must imply `q(x)` for all `x`. The system has to establish both conditions.

Rather than calling out to an external SMT solver, we built a lightweight solver into the compiler, tuned for the cases that come up in everyday code. It combines three techniques: *equality reasoning*, using the E-Graph data structure to compute congruence closure (from `v == a` and `a &gt; 3` it derives `v &gt; 3`); *normalization*, putting arithmetic into canonical form so that `x + 3 * y` and `2 * y + x + y` are seen as equal; and *inlining of known refinements and definitions*, so that a value of type `Int with y == x + 1` (or even a plain `val y: Int = x + 1`) contributes `y == x + 1` to the reasoning. Refinement types also interoperate with the rest of the type system. For instance, the literal type `1` is a subtype of `{x: Int with x == 1}`, and hence of `{x: Int with x &gt; 0}`.

### Case studies

The heart of the talk is a tour of what refinement types can express. We present a few examples below.

**Pre- and post-conditions in a signature.** The simplest use is constraining inputs. A color channel is a byte-ranged integer, and stating that once removes a whole class of bounds checks downstream:

```scala
type ChannelValue = {v: Int with 0 &lt;= v &amp;&amp; v &lt; 256}
def rgb(r: ChannelValue, g: ChannelValue, b: ChannelValue): Int
```

**Length-indexed collections.** Tracking a collection&apos;s size in its type turns length mismatches into compile errors. Here `concat` and `zip` carry exact length relations, and the compiler chains them to verify the final length on its own:

```scala
type Vec[T]

object Vec:
  def fill[T](n: Int, v: T): {r: Vec[T] with r.len == n} = ???

extension [T](a: Vec[T])
  def len: Int = ???
  def concat(b: Vec[T]): {r: Vec[T] with r.len == a.len + b.len} = ???
  def zip[S](b: Vec[S] with b.len == a.len): {r: Vec[(T, S)] with r.len == a.len} = ???

def example(n: Int, m: Int): {r: Vec[(String, Int)] with r.len == m + n} =
  val v1 = Vec.fill(n, 0)
  val v2 = Vec.fill(m, 1)
  val v3 = v1.concat(v2)          // len == n + m
  Vec.fill(m + n, &quot;&quot;).zip(v3)     // checked: m + n == n + m
```

**Predicates as a dispatch key.** Because refinement types are real types, they participate in overload resolution. This for example allows us to ship a fast path that is only valid under a precondition, and let the type checker pick it when the precondition is known:

```scala
def min(l: List[Int] with l.isSorted): Int = l.head  // O(1)
def min(l: List[Int]): Int = l.min                   // O(n)

def example(l: List[Int] with l.isSorted): Int = min(l)  // resolves to the O(1) overload
```

**A verified memoized Fibonacci.** Finally, we scale up to a more verification-flavored example: a memo table whose values are tied to the keys by a predicate, used to prove that a memoized `fib` returns exactly the same results as the reference definition:

```scala
case class DepMap[K, V](p: (K, V) =&gt; Boolean):
  def put(n: K, v: V with p(n, v)): Unit = ???
  def get(n: K): Option[{res: V with p(n, res)}] = ???

def fib(n: Int): {r: Int with r == (if n &lt;= 1 then 1 else fib(n - 1) + fib(n - 2))} =
  if n &lt;= 1 then 1 else fib(n - 1) + fib(n - 2)

val cache: (DepMap[Int, Int] with cache == DepMap[Int, Int]((k, v) =&gt; v == fib(k))) =
  DepMap[Int, Int]((k, v) =&gt; v == fib(k))

def fibMemo(n: Int): {res: Int with res == fib(n)} =
  cache.get(n) match
    case Some(res) =&gt; res
    case None =&gt;
      val res: (Int with res == fib(n)) =
        if n &lt;= 1 then 1 else fibMemo(n - 1) + fibMemo(n - 2)
      cache.put(n, res)
      res
```

### Related Work

In the Scala ecosystem, libraries such as [Refined](https://github.com/fthomas/refined) and [Iron](https://github.com/Iltotore/iron) offer user-level encodings of refinement types using opaque type aliases and implicit evidence. The talk will compare our approach with these libraries, showing how integrating the checks directly into the compiler increases expressiveness, reduces boilerplate, and improves performance.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/X9YKXK/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/X9YKXK/feedback/</feedback_url>
            </event>
            <event guid='76716ff8-6057-5256-9b48-6ca5abde3b69' id='106618' code='TTXSYQ'>
                <room>Maschinenhaus</room>
                <title>OSS &amp; AI: How to support your project community</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-13T15:15:00+02:00</date>
                <start>15:15</start>
                <duration>00:30</duration>
                <abstract>This talk will explore the intersection of OSS communities and the integration of generative and agentic AI in software development practices. This talk will go over emerging tensions for OSS communities and offer tools for projects to support and protect their members.</abstract>
                <slug>scala26-106618-oss-ai-how-to-support-your-project-community</slug>
                <track></track>
                
                <persons>
                    <person id='105755'>Hana Frluckaj</person>
                </persons>
                <language>en</language>
                
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/TTXSYQ/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/TTXSYQ/feedback/</feedback_url>
            </event>
            <event guid='fa7c3ecd-f772-556e-bf3a-7cc4e8006bb4' id='99741' code='8GCRBN'>
                <room>Maschinenhaus</room>
                <title>Cyfra: Scala on GPU</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-13T16:05:00+02:00</date>
                <start>16:05</start>
                <duration>00:30</duration>
                <abstract>Learn how to accelerate Scala code by orders of magnitude with Cyfra.

There are many libraries that give you access to low-level GPU APIs, but a high-level, functional one is a different story. That&#8217;s why we created the Cyfra GPGPU framework. In this talk, we&#8217;ll demonstrate how to use it to build high-performance GPU applications with Scala.</abstract>
                <slug>scala26-99741-cyfra-scala-on-gpu</slug>
                <track></track>
                
                <persons>
                    <person id='99177'>Szymon Rodziewicz</person><person id='103278'>Marcin Z&#322;akowski</person>
                </persons>
                <language>en</language>
                <description>In this talk, we will show how to build high-performance Scala GPU applications with Cyfra. First, we will introduce the audience to the current landscape of GPU programming and explain our philosophy. Then, we will dive into our model of type-safe data pipelines and memory management. To complete the picture, we will also showcase a set of real-world applications, including an end-to-end LLM inference engine, written entirely in Scala.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/8GCRBN/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/8GCRBN/feedback/</feedback_url>
            </event>
            <event guid='8c95c1b5-2af5-5e95-883f-f70af0a41319' id='99509' code='8NF7WU'>
                <room>Maschinenhaus</room>
                <title>Metals Reimagined - LSP in the age of LLMs</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-13T16:55:00+02:00</date>
                <start>16:55</start>
                <duration>00:30</duration>
                <abstract>We are currently working on Metals 2, which is a new indexing and compilation approach, designed to make indexing as fast as possible and ensure the editor remains functional even if parts of the project fail to compile. Thanks to this even while working on large monorepos it should be possible to quickly set up your editor.</abstract>
                <slug>scala26-99509-metals-reimagined-lsp-in-the-age-of-llms</slug>
                <track></track>
                
                <persons>
                    <person id='98962'>Tomasz Godzik</person>
                </persons>
                <language>en</language>
                <description>Metals is the Scala and Java Language Server, providing IDE features within editors such as Visual Studio Code, Cursor, Zed, and Helix. This makes it essential for anyone looking to use new agentic tools. Many companies are now utilizing LLM trends to boost developer performance, but a major challenge has has been that Metals becomes less efficient as codebases scale&#8212;a common issue in large organizations.

Metals 2 is a new indexing and compilation approach, designed to make indexing as fast as possible and ensure the codebase remains functional even if parts of the project fail to compile. Applying this to both Scala and Java code, Metals 2 aims to become the premier JVM language server. We are currently cooperating with multiple large monorepos testing and further enriching this approach.

Let&#8217;s explore how this can enhance developer workflow to show the Scala developers that tooling can finally be great.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/8NF7WU/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/8NF7WU/feedback/</feedback_url>
            </event>
            
        </room>
        <room name='Palais Atelier' guid='18a194b0-56df-5c0c-baaf-51d88c93f940'>
            <event guid='9914260a-350c-5ebb-9faa-1f8857437347' id='99214' code='K7ZLQH'>
                <room>Palais Atelier</room>
                <title>Mastering IntelliJ IDEA&#8217;s Debugger for Scala Development</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-13T10:30:00+02:00</date>
                <start>10:30</start>
                <duration>00:30</duration>
                <abstract>Debugging in Scala can be frustrating, but it doesn&#8217;t have to be. Discover how IntelliJ IDEA&#8217;s debugger thanks to features like conditional breakpoints and smart logging, can help you pinpoint bugs faster and with less hassle. Leave with practical tips to debug smarter, not harder.</abstract>
                <slug>scala26-99214-mastering-intellij-idea-s-debugger-for-scala-development</slug>
                <track></track>
                
                <persons>
                    <person id='98663'>Maciej Gorywoda</person>
                </persons>
                <language>en</language>
                <description>Debugging sounds like a very straightforward task. You place breakpoints, run the program, and see where it stops and what values the fields hold at that point. When it&#8217;s not enough, you make yourself a big warm mug of coffee, sprinkle the code with println statements, and mentally prepare for a day of reading logs and re-running the program over and over until it starts to make sense.

But if you have the right tools at your disposal, debugging in Scala does not have to be such a grueling task. This talk explores practical techniques and underused features of IntelliJ IDEA&#8217;s debugger to help you pinpoint bugs with precision, even in complex codebases. We will cover, among others, conditional breakpoints, log expressions, the call stack, the println debugger, and unsuspended breakpoints for logging. You will leave this talk with actionable insights to improve your debugging experience and reduce reliance on verbose log statements.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/K7ZLQH/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/K7ZLQH/feedback/</feedback_url>
            </event>
            <event guid='f22a9f07-4b52-5d88-9cf1-936cee0426bd' id='100197' code='SX7FTM'>
                <room>Palais Atelier</room>
                <title>Blazing-Fast Lambda Calculus via Metaprogramming</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-13T11:20:00+02:00</date>
                <start>11:20</start>
                <duration>00:30</duration>
                <abstract>Interpreting lambda calculus is simple but slow. Using multi-stage metaprogramming, we built a JIT that compiles each program to native JVM code at load time, running 2&#8211;10x faster than existing interpreters &#8211; including heavily optimized Rust and Haskell implementations. The surprising part: staging resulted in remarkably little code.</abstract>
                <slug>scala26-100197-blazing-fast-lambda-calculus-via-metaprogramming</slug>
                <track></track>
                
                <persons>
                    <person id='99563'>Alex Nemish</person>
                </persons>
                <language>en</language>
                <description>Many systems ship small programs in a tiny language based on lambda calculus &#8211; functions, function calls, a handful of built-in operations, and constants &#8211; and run them with an interpreter. 
We replaced the interpreter with a JIT that translates each program into native JVM code as it loads: a lambda becomes a JVM lambda, an application becomes a real function call, and built-ins and constants map onto efficient runtime primitives. 
What I find most compelling is how little code it took: multi-stage metaprogramming let us turn an interpreter into a compiler with surprisingly little code, which says a lot about how powerful the technique is. 
I&apos;ll walk through the staging approach, the benchmark results against existing interpreters, and the subtle pitfalls of JIT-compiling an untyped language while preserving exact evaluation semantics &#8211; a practical tour of runtime code generation and metaprogramming on the JVM.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/SX7FTM/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/SX7FTM/feedback/</feedback_url>
            </event>
            <event guid='8dddd71b-77c0-5d9c-9429-46086d813b38' id='99257' code='FTJSQF'>
                <room>Palais Atelier</room>
                <title>Scoverage: Test Coverage for the Scala Codebases</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-13T15:15:00+02:00</date>
                <start>15:15</start>
                <duration>00:30</duration>
                <abstract>You will learn about how to measure test coverage of your Scala codebase with Scoverage, the Scala 3 coverage tool. After learning the basics, we will dive deeper into how it is implemented, and talk about the hardening work done by the Scala Center to make the feature robust and reliable in interaction with the rest of the language features.</abstract>
                <slug>scala26-99257-scoverage-test-coverage-for-the-scala-codebases</slug>
                <track></track>
                
                <persons>
                    <person id='98715'>Anatolii Kmetiuk</person>
                </persons>
                <language>en</language>
                <description>Code coverage is a critical feature for robust quality assurance at the industry. It sounds simple: mark which lines ran. In Scala 3, Scoverage is a compiler feature: it rewrites typed trees, inserts tracking probes, and then hands the modified tree to every later compiler phase. That makes it available out-of-the-box for all Scala users with a simple compiler flag. Tight coupling with the compiler itself, though, poses a challenge in making it work with all compiler features.

This talk has a dual purpose. First, it is a guide to get started using coverage in your codebase. You will walk out of this 30-min talk having a useful skill of measuring how well your tests cover your code, thus contributing to reliability and robustness of your work.

Second, it is a technical deep dive into how coverage works under the hood, and what challenges we encountered making it work well. Coverage sits fairly early in the pipeline of compiler phases, and it modifies the trees heavily with instrumentation. Frequently, this breaks assumptions for the downstream phases that are responsible for all the numerous Scala 3 features. Examples include instrumentation interacting with erasure, singleton and wildcard types, capture checking, pattern matching, tail-recursion and infinite-loop warnings, constructor calls, parameterless methods, closures, and JVM method-size limits.

These are a lot of pieces interacting in complex ways. To make coverage work robustly, it is necessary to track, prioritize and fix breakages in a systematic way. In this talk, we will explore the process we use for that, as well as give some highlights of the typical breakages we encounter.

So the second purpose of this talk is to give a glimpse to a curious-minded engineer into the compiler internals. An industry practitioner will leave with a deep understanding not only of how to use the coverage feature, but also how it works under the hood. And for someone working on the compiler or just curious about how Scala works, it is a great opportunity to learn more about the compiler itself.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/FTJSQF/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/FTJSQF/feedback/</feedback_url>
            </event>
            <event guid='e163cf2a-a65d-5041-997e-1cc557763798' id='99884' code='RBXTYA'>
                <room>Palais Atelier</room>
                <title>Stop Breaking Production - Schema Evolution Demystified</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-13T16:05:00+02:00</date>
                <start>16:05</start>
                <duration>00:30</duration>
                <abstract>You deploy a harmless-looking change&#8230; and production starts failing: consumers crashing, events rejected. What went wrong? In this talk, we demystify message compatibility across events and APIs, showing how to evolve schemas safely without breaking your systems.</abstract>
                <slug>scala26-99884-stop-breaking-production-schema-evolution-demystified</slug>
                <track></track>
                
                <persons>
                    <person id='99300'>Jan-Pieter van den Heuvel</person>
                </persons>
                <language>en</language>
                <description>This session explores how and why message compatibility breaks in real-world systems: across events, commands, APIs, and persisted state. We&#8217;ll clarify backward, forward, and full compatibility, and map them to concrete schema evolution rules (what you can safely add, remove, or change, and what you can&#8217;t). You&#8217;ll see practical rollout strategies (consumer-first vs. producer-first), and how mistakes lead to subtle, production-breaking issues. We&#8217;ll also discuss the trade-offs and decisions you face when message consumption fails in production. Finally, we&#8217;ll compare JSON, Protobuf, and Avro through the lens of compatibility guarantees, and demonstrate how a schema registry and code generation help enforce contracts at scale. You&#8217;ll leave with actionable patterns and mental models to evolve distributed systems confidently without breaking production.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/RBXTYA/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/RBXTYA/feedback/</feedback_url>
            </event>
            <event guid='adb5eb16-58e4-5c7a-b58e-ca92ff8578d8' id='99958' code='HV9UPQ'>
                <room>Palais Atelier</room>
                <title>Bridging between Scala &amp; Python with GraalVM</title>
                <subtitle></subtitle>
                <type>Talk</type>
                <date>2026-10-13T16:55:00+02:00</date>
                <start>16:55</start>
                <duration>00:30</duration>
                <abstract>We will present our ongoing work to bridge between Scala 3 (&amp; Kotlin) and Python 3 using GraalVM. We will explain how the interoperability was designed; how type hints map to Scala 3&apos;s type system, how other Python 3 concepts translate to Scala, and our the progress to publish python wheels to close.</abstract>
                <slug>scala26-99958-bridging-between-scala-python-with-graalvm</slug>
                <track></track>
                
                <persons>
                    <person id='99360'>Hamza Remmal</person>
                </persons>
                <language>en</language>
                <description>Thanks to its rich ecosystem of libraries, Python 3 has become the most widely used programming language over the last few years. In this session, we will present our ongoing work to bridge between Scala 3 and Python 3 using GraalVM. We will introduce the architecture and key decisions of our design and demonstrate how Python 3 code can be safely used seamlessly within a Scala 3 project. The audience will learn how Python type hints are represented within Scala and how other Python concepts are adapted to Scala. 
A key part of the ongoing effort is making popular Python libraries ready and available to be used within the JVM ecosystem using our tool. We will therefore report the current status of the ongoing work to publish the metadata necessary for the libraries to be used. The talk will also include practical demonstrations showing how python source code, and how the mentioned libraries, can be integrated with minimal boilerplate within Scala 3 projects. 
At the end of the talk, the audience should be able to use all of the presented material and be able to build cross-language projects with all of their favourite Python libraries within their Scala 3 projects.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/HV9UPQ/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/HV9UPQ/feedback/</feedback_url>
            </event>
            
        </room>
        <room name='Frannz Salon: Lab 1' guid='a5b07f3a-ab90-5efe-b5c0-29df8a67529e'>
            <event guid='8312eab8-3fd9-5f08-8e37-0d92d027aaea' id='99979' code='PRW8FG'>
                <room>Frannz Salon: Lab 1</room>
                <title>Build a production service with VirtusLab Scala Stack and AI</title>
                <subtitle></subtitle>
                <type>Interactive labs</type>
                <date>2026-10-13T11:00:00+02:00</date>
                <start>11:00</start>
                <duration>02:00</duration>
                <abstract>Build and ship a production-ready microservice in direct-style Scala 3: no Futures, no IO monads. Set up an HTTP API with Tapir, concurrency and resilience with Ox, a type-safe SQL layer, and an sttp client, with AI assistance throughout. Type-safe, Loom-powered, and refreshingly simple Scala.</abstract>
                <slug>scala26-99979-build-a-production-service-with-virtuslab-scala-stack-and-ai</slug>
                <track></track>
                
                <persons>
                    <person id='99375'>Piotr Janczyk</person>
                </persons>
                <language>en</language>
                <description>This lab is a hands-on follow-up to the talk &quot;VirtusLab Scala Stack &#8212; back to the roots.&quot; The talk argues for direct-style Scala, in the lab, you write it. Over two hours you&apos;ll build a working microservice in Scala 3 without reaching for Futures or IO monads. The code reads as plain, sequential Scala, even though it&apos;s backed by a strong type system, automatic resource handling, and Java&apos;s virtual threads.

We start from a prepared project, so setup takes a few minutes rather than half the session. From there you&apos;ll add an HTTP API with Tapir and its generated OpenAPI docs, manage concurrency, timeouts, retries, resource safety, and error handling with Ox, read and write data through a typed SQL library (Parlance), and make outbound calls with sttp. You&apos;ll also see how AI coding assistants, guided by VirtusLab&apos;s open-source Scala skills, speed up writing idiomatic direct-style code. We finish with something most teams actually face: taking a piece of Future-based code and moving it to direct style, showing that you can migrate gradually.

The goal of this session is to show a lower-effort way into Scala for people who don&apos;t need full power of IO monads: less to learn, syntax that&apos;s familiar from other languages, and code that current AI tools handle well, while keeping Scala&apos;s type safety. After this workshop you will be able to start and structure a direct-style service yourself, with a clearer sense of when the style fits. The lab suits Scala developers curious about direct style, and anyone considering Scala 3 for backend work.

---
This session will not be livestreamed or recorded.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/PRW8FG/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/PRW8FG/feedback/</feedback_url>
            </event>
            
        </room>
        <room name='Frannz Salon: Lab 2' guid='84b26faf-709a-5129-8f97-9b3ca157cf44'>
            <event guid='fe1e1047-6532-5faf-9a97-d4cbe17fa1ca' id='99651' code='Y7ZCVR'>
                <room>Frannz Salon: Lab 2</room>
                <title>Build a webapp with Cats Effect and FS2</title>
                <subtitle></subtitle>
                <type>Interactive labs</type>
                <date>2026-10-13T11:00:00+02:00</date>
                <start>11:00</start>
                <duration>02:00</duration>
                <abstract>Learn about Cats Effect and FS2 while building a collaborative webapp with Calico! In this lab you will build an interactive widget for a webapp. Along the way we will learn about the IO, Resource, Stream, and Signal monads, and how the Typelevel stack can be used to make frontend applications.</abstract>
                <slug>scala26-99651-build-a-webapp-with-cats-effect-and-fs2</slug>
                <track></track>
                
                <persons>
                    <person id='96989'>Arman Bilge</person>
                </persons>
                <language>en</language>
                <description>Calico is a UI library for building interactive web applications using Cats Effect and FS2. This lab uses Calico as a learning aid to introduce attendees to the Typelevel stack and functional programming. By deploying Cats Effect and FS2 programs in an interactive webapp, they will get a real-time feedback loop to experiment with how different features of these libraries work in practice.

Building frontend applications is also a case study of the powers of different kinds of monads: IO, Resource, Stream, and Signal all play important roles in Calico. It also helps develop a more nuanced view of concurrency, by considering the role of fibers in a single-threaded frontend application.

We will start by building a &quot;hello world&quot; widget together as an example. This is when we will cover the core concepts. Then, attendees will work in pairs to design and implement an interactive widgets using Calico. To make their component interactive, they will have to reach for different features of Cats Effect and FS2. We will assemble all of these widgets into a single webapp.

I ran a version of this lab during the Typelevel Meetup last year. Here was the product:
https://www.armanbilge.com/lausanne-meetup-aug-2025/

Because attendees will work on their own widgets in pairs, I think this lab will simultaneously be able to serve two audiences:
(1) Attendees familiar with the Typelevel stack and want to have a taste of how it can be used to create frontend webapps with the Calico library.
(2) Attendees new to Typelevel and functional programming who will get a feel for the capabilities of this paradigm via an interactive sandbox.

---
This session will not be livestreamed or recorded.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/Y7ZCVR/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/Y7ZCVR/feedback/</feedback_url>
            </event>
            
        </room>
        <room name='Frannz Salon: Lab 3' guid='a88b6ed8-8a1e-5452-a8c6-e8b03a7f8138'>
            <event guid='3b9ecdac-ab7c-5574-a43a-b25c851a892a' id='99512' code='HM87YG'>
                <room>Frannz Salon: Lab 3</room>
                <title>Reactive UI with Laminar</title>
                <subtitle></subtitle>
                <type>Interactive labs</type>
                <date>2026-10-13T11:00:00+02:00</date>
                <start>11:00</start>
                <duration>02:00</duration>
                <abstract>Laminar is a Scala.js-first approach to reactive UI for the web, combining declarative presentation with logic for how to make updates based on events or other state changes. Beyond basics, lets also explore interop with JS libraries, and even concerns such as code organisation, and effective error handling practises.</abstract>
                <slug>scala26-99512-reactive-ui-with-laminar</slug>
                <track></track>
                
                <persons>
                    <person id='98954'>Jamie Thompson</person>
                </persons>
                <language>en</language>
                <description>This lab is all about becoming effective with the Laminar library for Scala.js: avoiding spaghetti code, managing events, and asynchronous communication with the backend. We would also consider concerns such as targeted updates to dynamic elements.  Example of interop can be with jQuery widgets. This would be project based. Probably covering some sort of CRUD application with form validation, and asynchronous search. (Perhaps it can be a more whimsical domain for entertainment purposes). I have 2 years professional experience using Laminar to build business applications.

---
This session will not be livestreamed or recorded.</description>
                <recording>
                    <license></license>
                    <optout>false</optout>
                </recording>
                <links></links>
                <attachments></attachments>

                <url>https://cfp.scaladays.org/scala26/talk/HM87YG/</url>
                <feedback_url>https://cfp.scaladays.org/scala26/talk/HM87YG/feedback/</feedback_url>
            </event>
            
        </room>
        
    </day>
    
</schedule>
