TL;DR: I'm building a programming language where every variable, function, and line of code has a timestamp baked in. No more "it works on my machine." No more mystery bugs from 3 months ago. Just pure, reproducible, time-aware code. And I need your help building it.
The Problem: Code Has No Memory
Let me ask you something: when was the last time you could perfectly reproduce a bug from production?
You pull the logs. You check the commit hash. You try to reconstruct the environment. But something's always different—a dependency updated, a config changed, a race condition that only happens on Tuesdays.
Modern programming treats time as an afterthought. We bolt on version control (Git), logging (Winston/Log4j), and tracing (OpenTelemetry) as external tools. But what if time was built into the language itself?
What if every single piece of your code carried its own timestamp, its own history, its own proof of existence?
That's LAW-T.
What is LAW-T?
LAW-T (Law-based Time-labeled) is a new programming paradigm where:
- Every syntax element has a Time-Labeled Binary (TLB) — a cryptographic timestamp that makes it unique across space and time
- The language evolves through formal laws — no more "breaking changes," only proven upgrades
- External systems are explicit — file I/O, network calls, even GPU access are declared and tracked
- Two developers never write the same code — even if they type identical text, their TLBs differ
Think of it as Git + blockchain + formal verification + programming language = LAW-T.
Show Me Code
Here's what LAW-T looks like:
module cache_demo @t[2025-10-31T18:40Z; lane=0xA1B2; seq=42]
// Declare external dependencies explicitly
adapter kv@t[...]: exo(kv) {
get(key: Str) -> Option<Bytes>
put(key: Str, val: Bytes) -> Unit
}
adapter http@t[...]: exo(net) {
get(url: Str) -> Bytes
}
// Every function has a timestamp
fn count_lines@t[...](text: Bytes) -> Int !{cpu} {
let mut count@t[...] = 0
for byte@t[...] in text {
if byte == 0x0A { count = count + 1 }
}
return count
}
// Effects are explicit: this function touches network AND storage
fn cached_count@t[...](
store: kv,
url: Str
) -> Int !{cpu, exo(net), exo(kv)} {
let key@t[...] = "lines:" + url
match await store.get(key) {
Some(cached) => decode_int(cached)
None => {
let text@t[...] = await http.get(url)
let result@t[...] = count_lines(text)
await store.put(key, encode_int(result))
result
}
}
}
What's happening here?
-
@t[...]— Every binding gets a unique timestamp (auto-generated by your editor) -
!{cpu, exo(net)}— Explicit effect declarations (no hidden side effects) -
adapter— External systems are first-class, not magic imports -
await— Async is a law, not a runtime hack
The Magic: Time-Labeled Binary (TLB)
Every piece of code in LAW-T carries a TLB:
TLB = epoch | lane | seq | rand | proof
| Field | Size | Purpose |
|---|---|---|
| epoch | 64 bits | UTC nanoseconds (or Hybrid Logical Clock for offline) |
| lane | 32 bits | Your developer ID (derived from SSH key + machine ID) |
| seq | 32 bits | Monotonic counter (increments every save) |
| rand | 32 bits | Cryptographic entropy (prevents collisions) |
| proof | 32 bits | Hash of content (detects tampering) |
Full form:
@t[2025-10-31T15:20:18.123456789Z; lane=0x5A7C23; seq=4182; r=F39A12; p=9B77]
Why does this matter?
- Perfect Reproducibility: Same TLBs + same inputs = same outputs, always
-
No Merge Conflicts: Your
fooand myfoohave different TLBs—no collision - Time Travel Debugging: Jump to any moment in your code's history
- Audit Trails: Every change is cryptographically signed and timestamped
- Distributed Sync: No central clock needed; TLBs create their own ordering
The Self-Modifying Part: Meta-Laws
Here's where it gets wild. The language can upgrade itself.
Imagine you want to optimize for loops to use chunked iteration for better cache locality. In most languages, you'd wait for the core team to ship v2.0 (and break everything).
In LAW-T, you submit a meta-law:
meta change law for_each@t[2025-11-01T10:00Z] {
from: "loop { match xs.next() { Some(x) => Body ; None => break } }"
to: "while xs.next_chunk(16) { for x in chunk { Body } }"
proofs:
- property: preserves_order
- perf: p95_latency <= baseline * 1.02
- determinism: same_inputs_same_outputs
- backwards_compat: old_code_still_compiles
migration:
auto: rewrite_simple_loops
manual: flag_complex_cases
}
The system:
- Runs your old code and new code side-by-side
- Checks that behavior is equivalent (via property tests)
- Verifies performance doesn't regress
- If all proofs pass → upgrade is adopted
- Old code still works (pinned to old TLBs)
No more Python 2 → 3 disasters. Every upgrade is proven safe.
The Exo-Effect System: No More Hidden Dependencies
In LAW-T, everything external is explicit:
// Traditional code (hidden dependencies)
fn bad_example() {
let data = fs.read("config.json") // Where did fs come from?
http.post(API_URL, data) // What's API_URL?
print("Done") // Stdout is I/O too!
}
// LAW-T code (explicit adapters)
fn good_example@t[...](
fs: FileSystem,
net: HttpClient,
console: Console
) -> Unit !{exo(fs), exo(net), exo(console)} {
let data@t[...] = await fs.read("config.json")
await net.post(API_URL, data)
console.log("Done")
}
Every adapter:
- Has its own TLB (you know exactly which version you're using)
- Logs I/O digests (cryptographic proof of what was read/written)
- Can be mocked/replaced for testing
- Must declare its effects upfront
No more:
- "It works on my machine" (you can replay the exact I/O)
- Hidden network calls (effects are type-checked)
- Flaky tests (deterministic I/O replay)
Real-World Use Cases
1. AI Model Provenance
Train a model with LAW-T, and every hyperparameter, every batch, every gradient update is time-stamped:
fn train@t[...](config: Config, data: Dataset) -> Model !{cpu, exo(gpu)} {
let mut model@t[...] = init_model(config)
for batch@t[...] in data.iter() {
let loss@t[...] = forward(model, batch)
let grads@t[...] = backward(loss)
model = update(model, grads)
// Every update creates new TLB → full lineage tracked
}
return model
}
Result: Perfect reproducibility. Regulators can verify your exact training process. No more "trust us."
2. Distributed Systems Without Clocks
No NTP? No problem. LAW-T uses Hybrid Logical Clocks:
// Multi-region key-value store
fn replicate@t[...](key: Str, val: Bytes) -> Unit !{exo(kv)} {
let update@t[...] = { key, val, tlb: current_tlb() }
await store_us.put(key, val) // US datacenter
await store_eu.put(key, val) // EU datacenter
// Conflicts resolved by TLB causality, not wall-clock time
}
No split-brain. No last-write-wins bugs. Just provable happens-before relationships.
3. Web3 Wallets (Time-Card Protocol)
Your crypto lives off-chain in a time-labeled ledger. On-chain transactions only happen when you actively use it:
// Off-chain: track intents
intent@t[...] = { swap: 0.5 ETH → USDC, max_slippage: 0.01 }
policy@t[...] = { daily_limit: 1 ETH, allowed: [Uniswap, Aave] }
// On-chain: commit bundle when ready
fn commit@t[...](bundle: CommitBundle) -> TxHash !{exo(net)} {
// Bundle = (prev_state, new_state, proofs, signatures)
return await rpc.call("eth_sendTransaction", vault.commit(bundle))
}
Gas savings: 90% cheaper (only pay when you transact, not for every state change).
How to Build LAW-T (With Me)
I'm not doing this alone. This needs a community.
Here's the roadmap, and where you can jump in:
Phase 1: Bootstrap (Now - 3 months)
Goal: Minimal working prototype
What we're building:
- [ ] TLB library (Rust) — minting, verification, HLC
- [ ] Parser (tree-sitter grammar) — LAW-T → AST
- [ ] Type checker — basic types + effect system
- [ ] SIR compiler — AST → Semantic IR
- [ ] Interpreter (Python/Rust) — execute SIR
- [ ] Ledger (SQLite) — store TLB-indexed code
Tech stack:
- Rust for performance-critical parts (TLB, ledger, compiler)
- Python for rapid prototyping (interpreter, tools)
- Tree-sitter for parsing
- SQLite for local storage
- LLVM for future native compilation
How you can help:
- Compiler nerds: Help design SIR (the intermediate representation)
- Type system wizards: Build the effect checker
- Distributed systems folks: Improve HLC implementation
- Crypto devs: Review TLB security (collision resistance, proof format)
Phase 2: Self-Hosting (3-6 months)
Goal: Rewrite LAW-T compiler in LAW-T itself
What we're building:
- [ ] LAW-T stdlib (collections, async, I/O)
- [ ] Rewrite parser in LAW-T
- [ ] Rewrite type checker in LAW-T
- [ ] LLVM backend (LAW-T → native binaries)
- [ ] Package manager (
lawCLI tool)
How you can help:
- Language designers: Define core laws formally
- Tool builders: Build IDE plugins (VSCode, Neovim)
- Docs writers: Tutorial content, API references
- Early adopters: Build real projects, report pain points
Phase 3: Ecosystem (6-12 months)
Goal: Production-ready with real users
What we're building:
- [ ] Law registry (like npm/crates.io but for laws)
- [ ] Proof engine (auto-verify meta-law changes)
- [ ] Cloud ledger (IPFS/S3 backend for distributed storage)
- [ ] Adapters (Postgres, Redis, AWS, Kubernetes)
- [ ] Formal verification (integrate Lean 4 or K Framework)
How you can help:
- DevOps engineers: Build deployment tools
- Security researchers: Audit the system
- Library authors: Port popular libs to LAW-T
- Evangelists: Write blog posts, give talks
Let's Build This Together
Why I need you:
I can't do this alone. LAW-T needs:
- Compiler experts to optimize performance
- Type theorists to formalize the effect system
- Distributed systems engineers to bulletproof TLB sync
- Web3 devs to build the Time-Card protocol
- Tool builders to make the DX amazing
- Writers to explain these ideas clearly
- Early adopters to test in production
What you get:
- Co-author credit on papers/repos
- Core contributor status (your TLB in the history forever)
- Equity if we commercialize (law registries, hosted ledgers)
- A chance to build something genuinely new
Here's the repo: (Coming soon — setting up GitHub org)
Here's the Discord: (Join for real-time discussion)
Here's the RFC process: (How we make decisions)
Quick Start: Run Your First LAW-T Program
# Install (coming soon)
curl -sSf https://lawt.dev/install.sh | sh
# Create a new project
law new my-first-app
cd my-first-app
# Write some code (see examples above)
nano src/main.law
# Run it
law run src/main.law
# See the TLB DAG
law graph --output dag.svg
# Time-travel debug
law replay --at 2025-11-01T14:30:00Z
FAQ
Q: Is this like Git for code?
A: Git tracks files. LAW-T tracks every variable, function, and expression. It's Git at the AST level, with cryptographic proofs.
Q: Won't TLBs make code huge?
A: No. TLBs are stored in a separate ledger. Your source files look normal (we just inject TLBs during parsing).
Q: Can I use LAW-T with Python/JavaScript/Rust?
A: Yes! Adapters let you call any language. LAW-T can wrap existing code and add time-awareness gradually.
Q: What about performance?
A: We're targeting native speed via LLVM. Early benchmarks show <5% overhead for TLB tracking. Hot paths can be optimized to zero-overhead.
Q: Is this blockchain?
A: No. LAW-T uses blockchain ideas (content-addressing, immutability, cryptographic proofs) but doesn't require a blockchain. The ledger can be local, cloud-hosted, or IPFS.
Q: Who owns the IP?
A: Everything is MIT licensed. The community owns it. No VC-backed company will ever lock this down.
What Makes This Different?
| Feature | Traditional Languages | LAW-T |
|---|---|---|
| Time | External (Git, logs) | Built-in (TLB) |
| Effects | Implicit (hidden I/O) | Explicit (declared) |
| Evolution | Breaking changes | Proven upgrades |
| Reproducibility | "Best effort" | Guaranteed |
| Collaboration | Merge conflicts | TLB-based resolution |
| Provenance | Git blame (file-level) | Cryptographic (expression-level) |
| Upgrades | Manual migration | Auto-migration with proofs |
The Vision
Imagine a world where:
- Every AI model can be perfectly reproduced from first principles
- Every financial transaction has an unbreakable audit trail
- Every distributed system synchronizes without clocks
- Every software upgrade is proven safe before deployment
- Every programmer owns their code's history cryptographically
That's what LAW-T enables.
But I can't build it alone.
Join Me
If you're excited about:
- Programming language theory
- Distributed systems
- Blockchain/Web3
- Formal verification
- Developer tools
- Or just building something ambitious and weird
Let's talk.
Comment below, DM me, or join the Discord (link coming soon).
Let's make code time-aware. Let's make reproducibility the default. Let's build LAW-T.
Resources
- Twitter: @KagisoThabiwa
- Email: peacethabibinflow@proton.me
Tags for Dev.to / Hashnode
#lawt #programming #languagedesign #compilers #distributedSystems
#blockchain #web3 #rust #typescript #opensource #devtools #timetravel
#reproducibility #formalmethods #typesystem #effects #async #meta
#selfmodifying #provenance #cryptography #git #versioncontrol
Primary Tags (pick 4 for Dev.to):
#programming#opensource#compilers#distributedsystems
Secondary Tags:
#rust#typescript#blockchain#devtools
P.S. This is a long-term project. I'm not promising it'll be done in 6 months. But I am promising:
- Transparency — all decisions documented
- Community-first — no corporate takeover
- Working code — no vaporware
If you read this far, you're exactly who I need on this project.
Let's build the future of programming. Together.
— Peace Thabiwa
Founder, SageWorks AI
Top comments (0)