A complete server runtime. One 10MB binary with everything built in. No npm, no dependencies, no bloat. A simple scripting language powered by Go, with native goroutine concurrency and instant hot reload during dev. Bundle your app into its own binary for easy deployment.
Pre-built binaries: duso.rocks/download
Or install with Homebrew:
brew install duso-org/tap/dusoOr build from source:
Linux & macOS:
git clone https://github.com/duso-org/duso.git
cd duso
./build.shWindows PowerShell:
git clone https://github.com/duso-org/duso.git
cd duso
.\build.ps1Then optionally symlink it (Linux & macOS):
ln -s $(pwd)/bin/duso /usr/local/bin/dusoduso script.duduso -c 'print("Hello, World!")'duso -replduso -c 'http_server().start()'Open http://localhost:8080. You have a working server.
ai = require("claude")
print(ai.prompt("What is 2+2?"))
ai = require("openai")
chat = ai.session()
while true do
prompt = input("\n\nYou: ")
if lower(prompt) == "exit" then break end
write("\n\nOpenAI: ")
busy("thinking...")
write(chat.prompt(prompt))
end
ai = require("claude")
prompt = input("Ask the panel: ")
busy("asking...")
experts = ["Astronomer", "Astrologer", "Biologist", "Accountant"]
responses = parallel(map(experts, function(expert)
return function()
return ai.prompt(prompt, {
system = """
You are an expert {{expert}}. Always reason and
interact from this mindset. Limit your field of
knowledge to this expertise.
""",
max_tokens = 500
})
end
end))
busy("summarizing...")
summary = ai.prompt("""
Summarize these responses:
{{join(responses, "\n\n---\n\n")}}
List 3 things they have in common.
Then list the 3 things that are the most different.
""")
print(markdown_ansi(summary))
// server.du
server = http_server({port = 3000})
server.route("GET", "/users/:id", "get-user.du")
server.route("POST", "/users", "create-user.du")
print("Running on :3000")
server.start()
// get-user.du
ctx = context()
user = datastore("users").get(ctx.request().params.id)
ctx.response().json(user)
// create-user.du
ctx = context()
user = ctx.request().json()
datastore("users").set(user.id, user)
ctx.response().json(user)
// bees.du - Spawn workers, wait for all to finish
bees = 10
swarm = datastore("swarm")
swarm.set("done", 0)
swarm.set("buzzes", 0)
for i = 1, bees do
spawn("worker.du", {bee_id = i})
end
swarm.wait("done", bees)
print("All done! Total buzzes: " + swarm.get("buzzes"))
// worker.du - Spawned worker increments shared counters
ctx = context()
swarm = datastore("swarm")
buzzes = ceil(random() * 10)
for i = 1, buzzes do
sleep(random() * 0.5)
swarm.increment("buzzes")
end
swarm.increment("done")
duso -read # Interactive guided tour
duso -doc claude # Look up any function
duso -repl # Test code in real time
duso -init myproject # Create a starter project
duso -extract examples # Extract all examplesDuso is intentionally simple and predictable. No magic. No multiple ways to do the same thing. Every pattern is consistent so AI can reason about code reliably and write better scripts faster.
Duso is a joy to use. Everything including the runtime, libs, and docs is bundled in a single 10MB binary. No package management. No version conflicts. No stack building. Duso makes coding fun again.
Dave Balmer, creator of Duso
- Hot Reload: Edit, test, deploy. Same binary.
- One Binary: Everything included. No npm, pip, cargo.
- Simple Concurrency: Goroutines without the complexity.
spawn()andparallel(). - Full Web Stack: HTTP, routing, WebSockets, SSL, CORS, JWT, templates built in.
- General Purpose: Build APIs, web servers, scripts, tools, background jobs, batch processors.
- Built-in Datastore: ACID NoSQL key-value store, in-memory or persisted, perfect for caching and state.
- SQL Support: MySQL, MariaDB, TiDB, CouchDB drivers built in.
- AI Integrations: Claude, OpenAI, Gemini, Groq, Ollama, Azure AI. All built in.
- Docs in Binary: No internet needed.
duso -docfor any function. - Integrated Debugger: Breakpoints, stack traces, concurrent-aware.
- Linter & LSP Server: Built-in static analysis and language server for IDE integration.
- Editor Extensions: Syntax highlighting and code completion for VS Code, JetBrains, Vim.
- AI-Friendly Design: Simple, readable syntax that LLM agents understand and extend naturally.
- Single-Binary Deployment: Linux, macOS, Windows. Same build, every platform.
- Open Source: Apache 2.0. Community-driven.
- Website: duso.rocks
- Learning Guide: docs/learning-duso.md
- Built-in:
duso -readorduso -doc <topic>
Built-in integrations for:
- AI: Claude, OpenAI, Gemini, Groq, Ollama, Azure AI, DeepSeek
- Databases: MySQL, MariaDB, TiDB, CouchDB
- Payments: Stripe
- Testing & Utils: Icons (Phospher), Zero Language Model (zlm)
See contrib/ for full list and docs.
Duso is open source under Apache 2.0. Contributions welcome:
- Fork github.com/duso-org/duso
- Create a branch (
git checkout -b feature/thing) - Commit changes (
git commit -am 'add thing') - Push to branch (
git push origin feature/thing) - Open a Pull Request
See CONTRIBUTING.md and COMMUNITY.md for guidelines.
- Dave Balmer: design, development, documentation, dedication
- Shannan.dev: Provides AI-driven business intelligence solutions
- Ludonode: Provides agentic development and consulting
Q: Is Duso production-ready? A: Yes.
Q: How do I deploy Duso?
A: It's one binary. scp it to a server and run it. Alternatively, containerize it in Docker or deploy to Fly.io, Railway, or Heroku.
Q: Can I bundle scripts into the binary?
A: Yes. Use duso -bundle to embed scripts, configs, and static files into a single executable.
Q: Can I extend Duso with Go? A: Yes. The language is designed to be extended. You can write custom builtins in Go.
Apache 2.0. See LICENSE.