Smalltalk +

Transactions
Persistence
Multi-processing
Run existing Smalltalk code & objects
Integrate with IDEs & genies
Operate on large memory
One machine or many

Living Objects is a reimagination of Smalltalk that preserves its elegant object model while addressing the needs of modern software development.

Our mission is to create a system where objects truly live - where they remember their history, adapt to changes, and collaborate harmoniously with each other.

By building on Smalltalk's powerful foundation and adding modern capabilities like transactions, persistence, and multi-processing, we're creating a development environment where software can evolve naturally alongside its users.

Workspace "Create a new transaction" transaction := Transaction new. account := BankAccount named: 'Savings'. "Start transaction" transaction begin. account deposit: 100. account withdraw: 50. transaction commit.

Transactional Objects

Objects in Living Objects can participate in ACID transactions, ensuring that complex operations are atomic, consistent, isolated, and durable. Unlike traditional Smalltalk, Living Objects brings database-quality transactions to the object level.

Persistent Memory

Objects naturally persist across sessions without requiring separate database mappings. Every change to an object is captured in its memory, allowing for time travel debugging, historical analysis, and recovery from failures.

Multi-Processing

Modern Smalltalk for multi-core systems. Living Objects enables true concurrent processing while preserving the simplicity of Smalltalk's message-passing model, making full use of today's hardware.

"Define a bank account with transaction support"
Object subclass: #BankAccount
  instanceVariableNames: 'name balance transactions'
  classVariableNames: ''
  package: 'Banking'

initialize
  balance := 0.
  transactions := OrderedCollection new.

deposit: amount in: transaction
  "Deposit amount with transaction tracking"
  transaction
    execute: [ balance := balance + amount ]
    with: { self. #deposit:. amount }
    undoWith: [ balance := balance - amount ].
  transactions add: (TransactionRecord for: #deposit amount: amount).
  ^balance

Join the Living Objects Community

We're building a new generation of software that breaks free from the constraints of traditional systems.

GitHub Repository Read Our Principles