A Reactive Language 𑀯
Every platform has its own language, its own build tools, its own ecosystem. Writing an app that runs on servers, browsers, iOS, and Android means learning four toolchains, maintaining four codebases, and watching them drift apart. The logic is the same. The plumbing is not.
Seed is a programming language and ecosystem that compiles .tree
source code into native, idiomatic output for multiple platforms. You
write your logic once in a clean, indentation-based syntax. The
compiler produces Rust, TypeScript, Kotlin, Swift, or HVM, each looking
like it was written by hand for that target.
Seed is not a runtime or a virtual machine. It generates real native code that integrates with each platform's existing tools, libraries, and package managers.
| Package | Purpose |
|---|---|
| seed (this) | Entrypoint and CLI |
| mesh.tree | Compiler + runtime |
| deck.tree | Package manager |
| base.tree | Standard library |
| case.tree | Environment types and native bindings |
| Package | Purpose |
|---|---|
| flow.tree | Graphics, audio, interface logic |
| form.tree | Math |
| land.tree | Infrastructure |
| word.tree | Language and linguistics |
| code.tree | Content grammars (binary and text) |
| link.tree | Third party API connections |
| site.tree | App level frameworks |
.tree source
|
v
mesh.tree (compiler)
|
+---> Rust (servers, CLI, embedded)
+---> TypeScript (browsers, Node.js)
+---> Kotlin (Android, JVM)
+---> Swift (iOS, macOS)
+---> HVM (parallel computation)
The compiler parses .tree files into a surface AST, desugars into
core terms based on the Calculus of Constructions with self-types,
type-checks, and hands off to backend code generators. Each backend
produces idiomatic output for its platform.
For HVM targets, the runtime manages execution through WebAssembly, marshaling values and interpreting the IO protocol for side effects.
pnpm add @cluesurf/seed -g
# Compile a project
seed make
# Run in dev mode (watch + hot reload)
seed flow
# Add a package
seed deck save <package>
# Run tests
seed testtask greet
take name, like text
back call join
bind a, mark <Hello, >
bind b, read name
task main
save message
call greet
bind name, mark <world>
call print
bind text, read message
Compiles to:
Rust
fn greet(name: String) -> String {
format!("Hello, {}", name)
}TypeScript
export function greet(name) {
return `Hello, ${name}`;
}Copyright 2021-2026+ ClueSurf
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Made by ClueSurf, meditating on the universe ¤. Follow the work on YouTube, X, Instagram, Substack, Facebook, and LinkedIn, and browse more of our open-source work here on GitHub.
