# Cure v0.33.1 > Dependently-typed programming language for the BEAM with first-class FSMs and SMT-backed verification. Cure is an indentation-structured, expression-oriented language that compiles to BEAM bytecode and runs natively on the Erlang virtual machine alongside Elixir and Erlang. The type system is bidirectional with refinement types verified at compile time by the Z3 SMT solver. Finite state machines, typed actors, supervisors and OTP applications are all first-class language constructs. This file is generated dynamically and reflects every page, blog post and standard-library module currently shipped with the site. A machine-readable XML companion is published at `/sitemap.xml`. ## Overview - [Home](https://cure-lang.org/): Project landing page with the current release blurb and quick example. - [Sitemap](https://cure-lang.org/sitemap.xml): Comprehensive XML sitemap of every indexable URL. - [Robots](https://cure-lang.org/robots.txt): Crawler policy and sitemap discovery. ## Documentation - [Playground](https://cure-lang.org/playground): The Cure Playground: live syntax highlighting, a real-time type-check panel, and a sandboxed evaluator -- all in the browser. - [Conditional Dispatch (pickup)](https://cure-lang.org/pickup): The total, ordered, short-circuiting predicate-dispatch construct that replaces if/elif/else. Mandatory else terminator, strict Bool typing, source-order evaluation, refinement narrowing, formatter alignment, and a complete migration story. - [REPL](https://cure-lang.org/repl): The interactive Cure REPL: raw-mode line editor, live syntax highlighting, persistent history, incremental reverse search, Tab completion, and meta-commands. - [Pattern Matching](https://cure-lang.org/match): Every pattern shape Cure supports: literals, variables, lists, tuples, maps, records, ADTs, bitstrings, pins, repeated variables, guards, nested destructuring, exhaustiveness, and flow-typing. - [Roadmap](https://cure-lang.org/roadmap): What's implemented, what's next, and what's planned for the future. - [Tooling](https://cure-lang.org/tooling): CLI, Language Server, MCP server, optimizer, profiler, and pipeline events. - [Protocols](https://cure-lang.org/protocols): Ad-hoc polymorphism via proto/impl with guard-based dispatch. - [Applications](https://cure-lang.org/applications): First-class OTP applications and BEAM releases. The app container compiles a supervision tree into an Application callback module; cure release packages it as a bootable release. - [Actors](https://cure-lang.org/actors): Typed supervision trees with first-class actor and sup containers, the Melquiades send operator (<-|), links, monitors, and trap_exit. - [Finite State Machines](https://cure-lang.org/finite-state-machines): First-class FSMs with compile-time verification, struct-shaped state, caller/meta/payload separation, lifecycle hooks, event payloads, and transition notifications. - [Type System](https://cure-lang.org/type-system): Bidirectional checking, refinement types, dependent types (Sigma, Pi, equality), implicit arguments, holes, totality. - [Language Guide](https://cure-lang.org/language-guide): Complete syntax reference for the Cure programming language. - [Getting Started](https://cure-lang.org/getting-started): Install and run your first Cure program. ## Standard Library Auto-generated API reference for every module under `lib/std/*.cure`. Every entry is also linked from `/stdlib`. - [Std.Access](https://cure-lang.org/stdlib/Std.Access): Access protocol and composable lenses, modelled on Elixir's [`Access`](https://hexdocs.pm/elixir/Access.html) behaviour. - [Std.Actor](https://cure-lang.org/stdlib/Std.Actor): Typed-actor runtime operations: spawn, stop, send, introspect. - [Std.App](https://cure-lang.org/stdlib/Std.App): Start, stop, and inspect OTP applications from Cure. - [Std.CRDT](https://cure-lang.org/stdlib/Std.CRDT): Conflict-free Replicated Data Types for Cure (v0.27.0). - [Std.Core](https://cure-lang.org/stdlib/Std.Core): Identity, composition, booleans, comparison, and the `Result` / `Option` sum types. - [Std.Eq](https://cure-lang.org/stdlib/Std.Eq): Equality protocol for structural comparison of values. - [Std.Equal](https://cure-lang.org/stdlib/Std.Equal): Propositional equality combinators. - [Std.Fsm](https://cure-lang.org/stdlib/Std.Fsm): FSM runtime operations: spawn, stop, send events, get state. - [Std.Functor](https://cure-lang.org/stdlib/Std.Functor): Functor protocol for structures that support `fmap`. - [Std.Gen](https://cure-lang.org/stdlib/Std.Gen): Tiny stateless generator API for property-based testing (v0.19.0). - [Std.Http](https://cure-lang.org/stdlib/Std.Http): Minimal HTTP client (v0.23.0). - [Std.Io](https://cure-lang.org/stdlib/Std.Io): Standard I/O operations for printing to stdout. - [Std.Iter](https://cure-lang.org/stdlib/Std.Iter): Lazy iterators. - [Std.Json](https://cure-lang.org/stdlib/Std.Json): JSON encoder and decoder for Cure (v0.23.0). - [Std.List](https://cure-lang.org/stdlib/Std.List): Eager, persistent, singly-linked lists. - [Std.Map](https://cure-lang.org/stdlib/Std.Map): Map operations: get, put, delete, keys, values, merge. - [Std.Match](https://cure-lang.org/stdlib/Std.Match): Convenience helpers built on top of v0.18.0 deep destructuring. - [Std.Math](https://cure-lang.org/stdlib/Std.Math): Mathematical operations. - [Std.Option](https://cure-lang.org/stdlib/Std.Option): Standalone `Option(T)` helpers. - [Std.Ord](https://cure-lang.org/stdlib/Std.Ord): Ordering protocol: three-way compare plus total-order helpers. - [Std.Pair](https://cure-lang.org/stdlib/Std.Pair): Two-tuple helpers. - [Std.Process](https://cure-lang.org/stdlib/Std.Process): Raw process primitives: links, monitors, trap_exit. - [Std.Refine](https://cure-lang.org/stdlib/Std.Refine): Refinement type combinators. - [Std.Regex](https://cure-lang.org/stdlib/Std.Regex): Regular expressions for Cure (v0.27.0). - [Std.Result](https://cure-lang.org/stdlib/Std.Result): Standalone `Result(T, E)` helpers. - [Std.Set](https://cure-lang.org/stdlib/Std.Set): Sets represented as maps with `true` values. - [Std.Show](https://cure-lang.org/stdlib/Std.Show): The `Show` protocol: convert values to their human-readable `String` form. - [Std.String](https://cure-lang.org/stdlib/Std.String): String (UTF-8 binary) operations: length, concat, split, trim, case conversion, and integer/float/atom parsing. - [Std.Supervisor](https://cure-lang.org/stdlib/Std.Supervisor): Start, stop, and introspect Cure supervisor trees. - [Std.System](https://cure-lang.org/stdlib/Std.System): System operations: time, process identity, node info, exit. - [Std.Test](https://cure-lang.org/stdlib/Std.Test): Test assertion primitives plus a shrinking-aware property runner. - [Std.Time](https://cure-lang.org/stdlib/Std.Time): Time primitives for Cure (v0.27.0). - [Std.Vector](https://cure-lang.org/stdlib/Std.Vector): Vector (dynamic array) operations backed by Erlang lists. ## Blog - [Cure v0.33.0 :: Formalisation](https://cure-lang.org/blog/cure-v0.33.0) (2026-04-26): v0.33.0 publishes the long-overdue 1.0.0 normative specifications for `match` and `pickup`, the only two branching constructs in Cure. Two long-form documents land in HexDocs, the website grows a dedicated `pickup` page, and the language reference cross-links the new sources of truth. Nothing in the compiler moves: the implementation already honours every clause; v0.33.0 ships the contract, not a behaviour change. - [Cure v0.32.0 :: Trust, Export, Recall, Narrate](https://cure-lang.org/blog/cure-v0.32.0) (2026-04-25): v0.32.0 closes four distinct gaps that have been on the backlog since the registry landed in v0.23.0. Proof-carrying packages let consumers re-verify a publisher's type obligations offline, without re-running Z3. `cure export-types` translates Cure record and ADT declarations directly to proto3. `cure snap` saves and restores the entire REPL environment as a binary file. `cure story` reads a project and writes a narrative STORY.md introducing the system top-down: apps, supervisors, actors, FSMs, types. - [Cure v0.31.0 :: Specialise & Steer](https://cure-lang.org/blog/cure-v0.31.0) (2026-04-25): v0.31.0 stops paying for polymorphism Cure does not use, and starts steering its own optimiser with profiling data. Two long-deferred items finally land: monomorphisation specialises polymorphic call sites whose substitutions are concrete, and profile-guided optimisation feeds runtime profiles into the inliner and the SMT encoder. ASCII-art diagrams (`cure draw`) ship as a static counterpart to the v0.27.0 Mermaid emitter for terminals that cannot render Mermaid. - [Cure v0.30.0 :: John](https://cure-lang.org/blog/cure-v0.30.0) (2026-04-24): v0.30.0 adds one panoramic diagnostic exposed through three surfaces: `mix cure.john`, `cure john`, and the `:john` REPL meta-command all print a single Markdown-rendered report covering Cure application state, BEAM / OTP stats, system info, tooling, the current Cure project, a condensed `cure top` snapshot, doctor severity counts, and the latest log tails. Named in tribute to John Carbajal. - [Cure v0.29.0 :: Make Documentation Great](https://cure-lang.org/blog/cure-v0.29.0) (2026-04-23): v0.29.0 is the documentation release. Everything else is quiet. `cure doc` picks up an ExDoc-like two-pane layout driven by a new [doc] section in Cure.toml, every stdlib module grows a ## Examples block, the Cure website ships /stdlib and /stdlib/:module pages, the REPL's :help and :doc commands render Markdown properly, the parser stops dropping doc-comment blocks separated by blank lines, and a highlight.js language description plus refreshed vicure and vscode-cure plugins round out the surface. - [Cure v0.28.0 :: Talk Back](https://cure-lang.org/blog/cure-v0.28.0) (2026-04-22): v0.28.0 closes feedback loops: a type-checker bug fix, parser error recovery that emits all errors in one pass, "did you mean?" suggestions everywhere, cure fmt --diff, a Socratic fix assistant (cure bless), FSM time-travel via @record and cure replay, and a Playground with live type-checking and a sandboxed evaluator. - [Cure v0.27.0 :: The CLI, One Command at a Time](https://cure-lang.org/blog/cure-commands-tour) (2026-04-22): A tour of every subcommand exposed by the `cure` escript in v0.27.0: what each one does, the exact argument shape it accepts, and a real session showing what it prints when you actually run it. - [Cure v0.27.0 :: See Your System Breathe](https://cure-lang.org/blog/cure-v0.27.0) (2026-04-21): Observability and verification land on top of v0.26.0 applications: Cure.OTel span bridge, cure top / cure trace, Cure.Temporal bounded model checker, Cure.Protocol session types, typed-hole synthesis via cure synth, three new stdlib modules (Std.Time, Std.Regex, Std.CRDT), OSC 8 clickable-filepath errors, and a LiveView playground. - [Cure v0.26.0 :: Applications and Releases](https://cure-lang.org/blog/cure-v0.26.0) (2026-04-21): A first-class app container, Cure.toml [application] and [release] sections, an OTP .app resource emitter, and a cure release subcommand that packages the whole thing as a bootable BEAM release. - [Cure v0.25.0 :: Typed Supervision Trees](https://cure-lang.org/blog/cure-v0.25.0) (2026-04-20): A typed send operator (<-|), first-class actor and sup containers, live GenServer codegen, compile-time supervisor verification, and a new stdlib surface for links, monitors, and supervision trees. - [Cure v0.24.0 :: The REPL You Deserve](https://cure-lang.org/blog/cure-v0.24.0) (2026-04-20): A full rewrite of the interactive REPL: raw-mode line editor, live syntax highlighting, persistent history, incremental reverse search, Tab completion, minimal vi mode, and Marcli-rendered help. - [Cure v0.23.0 :: Packaging, Proof, and Polish](https://cure-lang.org/blog/cure-v0.23.0) (2026-04-19): The long-awaited remote package registry, property-based shrinking, Std.Json / Std.Http, cure doctor / fix / telemetry / coverage, and the cure_brainloop showcase example. - [Cure v0.22.0 :: Loose Ends](https://cure-lang.org/blog/cure-v0.22.0) (2026-04-19): Multi-statement lambda bodies, binary comprehension generators, and byte-size refinements. - [Cure v0.21.0 :: Through the Segments](https://cure-lang.org/blog/cure-v0.21.0) (2026-04-19): Binary destructuring lands in match, function heads, and let bindings with a dedicated exhaustiveness pass (E031). ADT constructor payloads accept function arrows, multi-line type ADT declarations parse, let grows in-place destructuring (E034), the algebra pretty-printer becomes the default cure fmt, and three new @derive targets land on top of Show/Eq/Ord. - [Cure v0.20.0 :: The Shape of Things](https://cure-lang.org/blog/cure-v0.20.0) (2026-04-18): AST polish across four coupled compiler tracks. Plain # comments are first-class AST nodes, binary literals and patterns gain the full Elixir-style segment grammar (<>), a Wadler/Inspect.Algebra-style pretty-printer lands behind cure fmt --algebra, and pattern narrowing can expose disjoint-tag and literal-equality witnesses. - [Cure v0.19.0 :: Bring the Furniture](https://cure-lang.org/blog/cure-v0.19.0) (2026-04-18): Ergonomics, proofs, and the first half of a registry. proof containers, assert_type, record defaults, @derive(Show, Eq, Ord), Std.Gen + Std.Test.forall, Std.Iter, version parser + dependency resolver, mutual-recursion totality, and multi-head cons patterns. - [Cure v0.18.0 :: Deep Destructuring—pattern matching grows up](https://cure-lang.org/blog/cure-v0.18.0) (2026-04-17): match and let gain a real pattern engine. Arbitrary nesting across tuples, lists (cons and fixed), maps, records, and ADT constructors. Field punning, a pin operator, repeated-variable equality guards, a Maranget-style nested exhaustiveness pass, and five new error codes. Map patterns that used to silently succeed now actually match. - [Cure v0.17.0 :: Proofs & Polish—Toward Idris](https://cure-lang.org/blog/cure-v0.17.0) (2026-04-16): Dependent-type core grows up: Sigma/Pi types, propositional equality, implicit arguments with first-order unification, hole-driven development, totality classification, path-sensitive refinement—alongside a real REPL, watch mode, LSP polish, doctests, and the first regression CI. - [Cure v0.16.0 :: The FSM That Contains Itself](https://cure-lang.org/blog/cure-v0.16.0) (2026-04-16): Finitomata-inspired dual-mode FSM compilation: inline on_transition handlers, hard/soft event suffixes, lifecycle callbacks, and full tooling integration. - [Cure v0.15.0 :: Effects, Documentation, and Developer Experience](https://cure-lang.org/blog/cure-v0.15.0) (2026-04-15): Effect system tracking IO/state/exceptions in the type system, documentation generator with `cure doc`, minimal REPL, source formatter, and expanded error catalog. - [Cure v0.14.0 :: Real-World Readiness](https://cure-lang.org/blog/cure-v0.14.0) (2026-04-15): Package management, deep dependent type tracking, LSP type holes, incremental compilation, cross-module protocol dispatch, testing infrastructure, and Elixir interop. - [Cure v0.13.0 :: The Type System Grows Teeth](https://cure-lang.org/blog/cure-v0.13.0) (2026-04-14): Dependent type verification at call sites via Z3, cross-module protocol registry, LSP code actions, five optimizer passes, FSM guards and actions. - [Cure v0.12.0 :: A Dependently-Typed Language for the BEAM](https://cure-lang.org/blog/cure-v0.12.0) (2026-04-14): The first complete release of the Cure rewrite. Full compilation pipeline, self-hosted stdlib, LSP, MCP, and more. ## Tools - [Playground](https://cure-lang.org/playground): Two-pane editor with live syntax highlighting, bidirectional type-checking and a sandboxed evaluator. - [REPL](https://cure-lang.org/repl): Browser-based access to the Cure interactive REPL. ## Optional - [Source repository](https://github.com/am-kantox/cure-lang): The Cure compiler, standard library and CLI sources. - [License](https://github.com/am-kantox/cure-lang/blob/main/LICENSE): Project licence.