What's new
What each release of Tessel brought, newest first. To get the latest, run
tessel update (or take the update the IDE offers). See
Installation if you don’t have Tessel yet.
Tessel’s first releases came quickly, several on some days, so each day’s are listed together under its last version. See How Tessel is made.
0.1.43
Section titled “0.1.43”October 10, 2026 · 0.1.42 and 0.1.43
-
Apps for Android.
tessel build --androidmakes an app an Android package from the same code: an.apkto install on a phone, or with--bundlean.aabfor Google Play, signed with your own key. On a phone, a finger taps and scrolls, a long press opens context menus, the app stays clear of the system’s bars and the on-screen keyboard, follows the dark theme, and Back closes what’s on top.tessel android doctorchecks that Android’s tools are installed. This is a first version: text input is basic, and system dialogs aren’t there yet. See Building for Android. -
asyncandawait. Steps that wait for something (a download, a timer, work in the background) can be written one after another, where they used to nest in blocks:let text = await fetch(url: address).awaitworks on every function that ends with a completion block, sofetch,after,request,download,runCommand,backgroundand your own such functions can be awaited as they are. Functions that wait are declared withasync fn, and a button’s action (or any block that gives no value) canawaitdirectly. See Waiting with async and await. -
Constants. A
letat the top of a file is a constant the whole program can use:let maxPlayers = 4. See Constants. -
Computed properties.
area: Float { width * height }in a struct or enum is read like a field,rect.area, and worked out each time. See Computed properties. -
Static members.
static letandstatic fnbelong to a type and are used through its name:Rect.zero,Rect.square(side: 2). See Static members. -
async,awaitandstaticare only keywords where they’re used this way, so programs that use them as names still build.
0.1.41
Section titled “0.1.41”October 8, 2026 · 0.1.40 and 0.1.41
- Smaller apps and faster builds for programs with large structs. A struct of more than about 16 fields is now moved as one block of memory, where each use of it used to cost code for every field. An app of 98,000 lines built around one large struct went from 73 MB of code and 12 minutes to build, to 13.6 MB and under a minute. Smaller structs are as before.
- A function kept in a struct’s field is called like a method:
rule.applies(4). See Function types. - Fixed:
- A struct with a field holding a function crashed the compiler when it
was passed to a
bindparameter. - Escape didn’t close a popover (or a sheet) in an app with
.onKeyEvent: the app got the key.
- A struct with a field holding a function crashed the compiler when it
was passed to a
tessel --versionsays which version a project uses, when the project is pinned to another one than is installed:tessel 0.1.36 (this project uses 0.1.38).- Fixed: an index that’s a call changing the list it indexes, through
a
bindparameter (list[grow(list)]), read the list as it was before the call, and could stop the program.
0.1.39
Section titled “0.1.39”October 7, 2026 · 0.1.38 and 0.1.39
- Dialogs.
alertandconfirmshow the system’s message dialogs,chooseFolderasks for a folder, andopenFilesfor several files. See Dialogs and sheets. - Sheets.
.sheet(isPresented:)shows your own views in a card over the dimmed window, anddismiss()closes it.TextPromptasks for a text andProgressPanelshows work going on, ready-made for a sheet. See Sheets. - Pickers:
DatePickerandCalendarfor dates,TimePickerfor the hour and minute, andFontPickerfor a font family. See DatePicker. - Notices:
showNotice("Saved")shows a short message that goes by itself.ProgressBarshows how far something is. - Printing:
printDocumentdraws pages aswritePDFdoes and prints them: through the system’s print dialog on macOS, and the PDF app on Windows. See Printing. - Ribbons in several files. A view of your own can make a ribbon’s tab, a group, or some of a group’s buttons, and the ribbon uses them as if they were written in it. See A ribbon in several files.
- Fixed:
g.textWidthleft out the spaces at the end of a text, so a space alone was 0 wide.- Padding on a
Dividermade the line thicker instead of leaving room around it.
0.1.37
Section titled “0.1.37”October 6, 2026 · 0.1.36 and 0.1.37
tessel newstarts a project from a template: a small to-do list app in a few files (the default), an app with one window, or a command-line program, with atessel.toml, a README and a.gitignore. The IDE offers the same templates in an empty folder. Seetessel new.- Databases.
openDatabaseopens (or creates) an SQLite database file, andexecuteandqueryrun SQL on it, with values filled in for?s. SQLite is built into Tessel, so it works the same on macOS and Windows with nothing to install. See Saving data in a database. - Font families and italic.
.font(italic:family:), and the same ong.textandg.textWidth: any installed font by name, or"monospaced". A font that isn’t installed falls back to the system’s.fontFamilies()lists the fonts installed. See font. - Password fields:
TextField(secure: true)shows a dot for each character, and its text can’t be copied. See TextField. - Hashes:
data.hash()gives SHA-256, SHA-1, SHA-512, MD5 and other digests, anddata.hexshows bytes as hexadecimal. See hash and hex. wrappingAdd,wrappingSubtractandwrappingMultiplyonInt, for hashes and checksums written in Tessel.- Fixed:
==between two cases of an enum whose cases hold different values crashed.
0.1.35
Section titled “0.1.35”October 5, 2026
- Ribbons.
Ribbon,RibbonTabandRibbonGrouplay out tabs of grouped commands, as office apps have, with large and small buttons, toggles and menus (RibbonButton,RibbonToggle,RibbonMenu). Groups shrink to fit a narrow window. See Ribbons. - 48 more built-in icons, for ribbons and toolbars: cut, paste, bold, the alignments, charts, sort, filter, sum and more. See Icons.
- The app’s manifest. The
[app]table oftessel.tomlgives the app’s name, identifier, version, author, copyright, icon, category and the files it opens. App bundles on macOS and.exefiles on Windows carry them, the About panel shows them, andappInfo()gives them to the program. See The project file. text += moreis fast: it adds to the string where it is, as+=on a list does (200 000 appends: 7 ms instead of 6 s).- Fixed:
toJsonon a type that contains itself (an enum of lists of itself, a tree) crashed the compiler.- Menu bar shortcuts didn’t run in a view with
.onKeyEvent. saveFilewith several types added a second extension.- In test scripts,
key shift+5types%, andtypewith no field edited presses each key.
0.1.34
Section titled “0.1.34”October 4, 2026 · 0.1.30 to 0.1.34
- PDF documents.
writePDFdraws pages with the sameGraphicsas aCanvas, andg.newPage()starts the next one. Text stays text that can be selected and searched, with its fonts in the file; shapes stay sharp at any zoom. See Making a PDF andwritePDF. - Much smaller apps on Windows. Apps draw, lay out text and read
pictures with what comes with Windows (Direct2D, DirectWrite and WIC), as
they do on macOS: a one-
Textapp is about 1.3 MB instead of 7.5 MB. See How big an app is. - A project chooses its version of Tessel.
tessel pinwrites the version into the project’stessel.toml, and from then on Tessel’s commands, editors and the IDE use that version for the project, installing it the first time. Seetessel pin. - Functions can change the caller’s value. A parameter declared
bindis the caller’s variable, field or list item itself, not a copy, as it already was for views:fn addBonus(scores: bind [Int]). Methods can have them too. See Changing the caller’s value. - New controls:
Slider,Stepper,ColorPicker,DisclosureGroup(for trees) andLazyVStack(for long lists). See Controls. - Drag and drop between views with
.draggableand.dropTarget, and every key with.onKeyEvent. Keyboard shortcuts can ask for Shift and Alt:.shortcut("shift+z"). - Background jobs report their progress and can be cancelled.
- Drawing: pictures made from pixels, gradients, layers that blend with
what’s under them (on Windows too), and SVGs on a
Canvas. See Drawing. - Menus and windows: context menus, popovers, the menu bar (the system’s on macOS), more than one window, asking before a window closes, and files opened with the app. See Menus, windows and documents.
- Language: bit operations, hex and binary number literals,
matcharms with several patterns, tuples inif let, and functions declared inside functions.Datacan have bytes appended to it. See Basics and Functions. - Fixed:
- Changing a loop’s variable through a closure (or a
bindargument) changed a copy of the list, not the list. - Appending many bytes to a
Datacould damage it.
- Changing a loop’s variable through a closure (or a
0.1.29
Section titled “0.1.29”October 3, 2026 · 0.1.23 to 0.1.29
- Much smaller apps. On macOS, apps draw, lay out text and read
pictures with what comes with macOS, so a one-
Textapp is about 1 MB instead of 8.3 MB. Apps carry SVG, pictures and Markdown only when they use them, and Windows apps no longer carry all of Tessel (a one-Textapp was 24 MB). See How big an app is. - IDE: the Design panel has an inspector, undo and redo, copy, cut,
paste and duplicate, an outline of the views, and more views to add
(
TextField,Toggle,Picker). A Preview panel shows Markdown files as they’ll look, next to their text. See The Design panel. - A code editor’s undo history includes the changes the program makes to
its text. New:
undoTextEdit()andredoTextEdit(). - A click inside a view with
.onKeygives it the keyboard. tessel preview --dark.- Fixed:
- On Windows, the REPL, hot reload and previews could crash, and endless recursion ended the program instead of being reported as a Tessel error, as on macOS.
pow(10, x)failed to build on macOS.
0.1.22
Section titled “0.1.22”October 2, 2026 · 0.1.14 to 0.1.22
- IDE: the Design panel. A picture of your app next to its code, where views can be selected, changed, added, moved and deleted. Every change is written into the code. See The Design panel.
- Canvas: draw views of your own with paths, shapes, text and pictures, and save drawings as pictures. See Drawing and the mouse.
- The mouse and keys:
.onPointer,.onKey,.onDrag,.cursor,.onDrop,.onResize,.tooltip,.offsetand.clipped. - A
Markdownview: text with headings, lists, code, tables, pictures and links. - Scroll bars in scroll views and code editors, which show when there’s more than fits and can be dragged.
- IDE: the documentation comes with it: the Docs button opens it next to the editor, without a network, with search. The explorer, the bottom panel and the Docs panel can be resized by dragging their edges.
tessel previewmakes a picture of an app’s window for editors. Seetessel preview.Datareads numbers, slices and Latin-1 text, and compresses.list += otherappends in place.readImagegives a picture file’s size and pixels, andappendDataadds bytes to the end of a file.CodeEditor: taller lines, and more room around the line numbers and the code.- Releases are for macOS and Windows together from now on.
- Fixed:
- Stopping
tessel runleft the program it started running. - A double click in a code editor or text field could select only part of a word.
- Stopping
0.1.13
Section titled “0.1.13”October 1, 2026 · 0.1.8 to 0.1.13
tessel repl: type code and see what it does, a line at a time. Animportstays for the rest of the session, so a project’s modules can be tried out at the prompt. See The REPL.- Hot reload:
tessel run --hotgives a running app its new code when you save, and keeps its state. In the IDE, “Reload on save”. - Light and dark: apps follow the system, or choose one with
app Name(appearance: .dark). Colors of your own with.rgband.rgba. .animation(): views move, resize and fade to their new state.Imageshows PNG and JPEG files.- Tab and Shift+Tab move between text fields, and input methods (Chinese, Japanese, Korean, accents) work in them.
- Time zones for
date,formatDateandparseDate, and calendar dates:dateParts,addToDate,daysBetweenand more. cancelRequestgives up arequestordownload. WebSockets can send and receive bytes.printshows lists, dictionaries, sets and tuples.enumerated(),zip, andfor (key, value) in dictionary.- Code completion in any editor through
tessel lsp. See Editor support. - App icons: an
icon.pngnext to a program is its app’s icon. - Fixed: REPL errors point at the right column, and every entry has its own number.
September 30, 2026
- Tuples and sets. See Collections.
- Modules:
import geometry, withpublicandprivate. See Programs and files.
September 29, 2026
- Errors with reasons:
Result<T>,Errorandtry. See Errors. - Clearer error messages for beginners, and a 21-lesson course for learning to program with Tessel.
September 28, 2026 · 0.1.4 and 0.1.5
- Interfaces. See Interfaces.
- Generics: generic functions, structs and enums, with interface constraints. See Generics.
while,while let,breakandcontinue, and reading input from the command line.- Faster lists, dictionaries, math and text.
September 27, 2026 · 0.1.0 to 0.1.3
- The first release: the language, the UI toolkit, the compiler, and the IDE.
- A much larger standard library: text, lists,
numbers, math, dates, files, the clipboard, and the network (requests,
downloads, WebSockets). JSON and binary saving. Work on another thread
with
background. - Open and Save dialogs, and number formatting with
formatted(decimals:). tessel update, and updates offered in the IDE. Code completion in the IDE, which offers to createmain.tslin an empty folder.- Apps about a third smaller.
- Fixed: four compiler crashes and several wrong results. Callbacks
(timers, requests) work in
fn mainprograms, and.hoverBackgroundworks on any view.