uplift is a general-purpose programming language whose design centers on unapologetic clarity of intent, expressed through a clean, coherent, and consistent syntax. It features explicit memory management through ownership, trait-based polymorphism, static generics, and macro-free compile-time programming.
// Mandatory example:
export fn main(): void {
println("Hello, world!")
}
First-Class Darwin Support: Most of our engineering effort has focused on Darwin operating systems (macOS, iOS, iPadOS), including native support for their simulators and built-in graphical user interface APIs.
Linux & Beyond: Initial support for Fedora Linux is underway, but more work is required to bring it to the same level of maturity.
Established Foundation: uplift is a fully functioning language with a settled design and a highly focused implementation strategy. It is simply young in terms of library completeness and platform reach — more mature on Darwin, with other platforms waiting to be built.
// Language principle: "The type should be obvious from the expression itself." // No type inference ambiguity.
struct Point { x: f64 y: f64 } fn distance(a: ref Point, b: ref Point): f64 { let dx: f64 = b.x - a.x let dy: f64 = b.y - a.y return (dx * dx + dy * dy).sqrt() } export fn main(): void { let origin = Point { x = 0.0, y = 0.0 } let target = Point { x = 3.0, y = 4.0 } let d: f64 = distance(ref origin, ref target) println("Distance: ${d}") // 5.0 }
Clear by design. Every line is self-describing. No context needed.
What Uplift is (and isn't)
Every programming language (and compiler implementation) forces you to accept certain warts. With uplift, we chose our trade-offs deliberately. Here is what we prioritized when designing the language (and compiler infrastructure):
Self-explaining code
Type inference ambiguity is designed out as much as possible. The uplift compiler expects mandatory explicit types only when the type-checker cannot unambiguously deduce the type from the expression; otherwise, automatic type inference is applied. The explicit syntax promotes readable code that makes future maintenance a breeze. This also ensures that anyone using a simple text editor can be productive.
Self-sustainable projects
Many programmers hit a wall when trying to compile an old project with an up-to-date compiler, only to find it is nearly impossible or highly time-consuming. This will not happen with uplift. An uplift project archive (.zip) can always be re-compiled using just the files stored within that archive. The uplift compiler will always be able to rebuild a project without external worries. Maximum resilience.
Modern Memory Management
Memory management is semi-automatic without a garbage collector. When a variable goes out of scope, or its ownership is passed to a function or another variable, the allocated memory is automatically freed following a strict ownership model. In addition, ownership can be moved, copied, and borrowed. To support this, the syntax remains simple and intuitive, using explicit tags like ref, inout, and others.
Concurrency and Parallelism
Uplift bypasses complex, boilerplate syntax for threads, mutexes, and semaphores. Instead, it utilizes simple-to-use actors with message passing. Any struct with methods can be designated as an actor. This keeps concurrency and parallelism straightforward yet highly flexible. For async actors, a supervisor is necessary. Performance tests show that 1,000,000 concurrent tasks consume roughly 366.5 MB of memory.
Comptime
Compile-time evaluation and reflection. There is no preprocessor and there are no macros—you use real code that runs at compile time (inside a comptime block) executed via a built-in interpreter.
Traits & Generics
Trait-based polymorphism with compile-time (comptime) monomorphized generics and associated items. Common traits like Eq, Ordered, Copy, Drop, and Hash come built-in out of the box.
GUI Applications
Write native applications with graphical user interfaces for macOS, iOS, iPadOS, and more with ease. Uplift includes a native GUI library that targets Darwin-based operating systems from a single codebase. Contributors are highly welcome to help port these capabilities to Linux, Windows, and other platforms.
Foreign Function Interface
Write applications that interact seamlessly with external C libraries through our FFI. Call C functions directly and use C types inside explicit unsafe blocks. Linking C libraries is trivial. For example, you can fetch the raylib library via Homebrew, write the interface code in uplift, and use it immediately. In fact, a pre-built raylib module is already available to use.
Test GUI Applications
Native iOS and iPadOS GUI applications need to be tested either in a simulator or on real hardware. Uplift builds in everything required to prepare, code-sign, and deploy your uplift applications directly to Apple devices. No external wrapper tools needed.
Other GUI Applications
Need a native GUI application that runs on Linux, Windows, or BSD? If you want to help make the uplift UI framework accessible on platforms beyond the Darwin ecosystem, we welcome your contributions.
And there is more, just to name a few:
Interactive REPL
Experiment and prototype interactively. Test ideas without a compile cycle.
LLVM Backend
Designed for native code generation via LLVM with -O0 to -O3 optimization, debug info, and cross-compilation support.
WebAssembly
Compile to WASM for browser and edge deployment. Same language, same safety, new platform.
If these choices align with your needs: We’d love for you to use it, enjoy it, and contribute. If you find a core decision you absolutely dislike: Then uplift simply might not be the language for you, and that is completely fine. We are always open to sensible suggestions that expand its capabilities, but we stand firmly behind our foundational architecture.
Current compiler status: 111,294 lines of code across 73 .zig source files.
Get started in seconds
Easy to use compiler. Zero configuration.
Install
upc is a single binary. Download the latest release for your platform, or build from source with Zig.
Write
Run upc new myproject to scaffold a new project, then cd myproject to explore the structure if you want to.
Run
Execute upc run myproject to compile and run. That's it — you're programming in uplift.
Ready to uplift?
Join developers who value clarity over cleverness.
No ambiguity. No surprises.
Get Started Now