This library includes six production-ready code generators that translate ActorSimulation DSL into different languages and frameworks.
Following
Fly.io's single-file Elixir pattern,
you can generate complete projects with just Mix.install!
#!/usr/bin/env elixir
Mix.install([{:gen_server_virtual_time, "~> 0.2.0"}])
simulation = ActorSimulation.new()
|> ActorSimulation.add_actor(:sender,
send_pattern: {:periodic, 100, :msg},
targets: [:receiver])
|> ActorSimulation.add_actor(:receiver)
{:ok, files} = ActorSimulation.OMNeTPPGenerator.generate(simulation,
network_name: "SimpleNetwork")
ActorSimulation.OMNeTPPGenerator.write_to_directory(files, "omnetpp_out/")#!/usr/bin/env elixir
Mix.install([{:gen_server_virtual_time, "~> 0.2.0"}])
simulation = ActorSimulation.new()
|> ActorSimulation.add_actor(:worker,
send_pattern: {:rate, 50, :task},
targets: [:processor])
|> ActorSimulation.add_actor(:processor)
{:ok, files} = ActorSimulation.CAFGenerator.generate(simulation,
project_name: "MyActors",
enable_callbacks: true) # Callback interfaces!
ActorSimulation.CAFGenerator.write_to_directory(files, "caf_out/")#!/usr/bin/env elixir
Mix.install([{:gen_server_virtual_time, "~> 0.2.0"}])
simulation = ActorSimulation.new()
|> ActorSimulation.add_actor(:sender,
send_pattern: {:burst, 10, 1000, :batch},
targets: [:receiver])
|> ActorSimulation.add_actor(:receiver)
{:ok, files} = ActorSimulation.PonyGenerator.generate(simulation,
project_name: "my_actors",
enable_callbacks: true)
ActorSimulation.PonyGenerator.write_to_directory(files, "pony_out/")#!/usr/bin/env elixir
Mix.install([{:gen_server_virtual_time, "~> 0.2.0"}])
simulation = ActorSimulation.new()
|> ActorSimulation.add_actor(:worker,
send_pattern: {:periodic, 100, :tick},
targets: [:processor])
|> ActorSimulation.add_actor(:processor)
{:ok, files} = ActorSimulation.PhonyGenerator.generate(simulation,
project_name: "my_actors",
enable_callbacks: true)
ActorSimulation.PhonyGenerator.write_to_directory(files, "phony_out/")#!/usr/bin/env elixir
Mix.install([{:gen_server_virtual_time, "~> 0.2.0"}])
simulation = ActorSimulation.new()
|> ActorSimulation.add_actor(:producer,
send_pattern: {:rate, 100, :data},
targets: [:consumer])
|> ActorSimulation.add_actor(:consumer)
{:ok, files} = ActorSimulation.RactorGenerator.generate(simulation,
project_name: "my_actors",
enable_callbacks: true)
ActorSimulation.RactorGenerator.write_to_directory(files, "ractor_out/")#!/usr/bin/env elixir
Mix.install([{:gen_server_virtual_time, "~> 0.2.0"}])
simulation = ActorSimulation.new()
|> ActorSimulation.add_actor(:publisher,
send_pattern: {:periodic, 100, :event},
targets: [:subscriber])
|> ActorSimulation.add_actor(:subscriber)
{:ok, files} = ActorSimulation.VlingoGenerator.generate(simulation,
project_name: "my-actors",
group_id: "com.example",
enable_callbacks: true)
ActorSimulation.VlingoGenerator.write_to_directory(files, "vlingo_out/")See the repository's examples/ directory for complete single-file scripts:
single_file_omnetpp.exs- OMNeT++ network simulationsingle_file_caf.exs- C++ Actor Frameworksingle_file_pony.exs- Pony capabilities-secure actorssingle_file_phony.exs- Go actors with Phonysingle_file_ractor.exs- Rust actors with Ractorsingle_file_vlingo.exs- Java actors with VLINGO XOOM
| Generator | Purpose | Output | Key Feature |
|---|---|---|---|
| OMNeT++ | Network simulation | NED + C++ | GUI tools, INET framework |
| CAF | Production actors | C++ + Catch2 | Callback interfaces |
| Pony | Safe concurrency | Type-safe actors | Data-race freedom |
| Phony | Go actors | Go + tests | Zero-allocation messaging |
| Ractor | Rust actors | Rust + Cargo | Gen_server-inspired, OTP-style supervision |
| VLINGO | Java actors | Java + Maven | Protocol actors, type-safe |
- Prototype in Elixir (fast iteration)
- Test with virtual time (deterministic)
- Visualize with sequence diagrams
- Generate to your target language
- Deploy to production
Benefits of using Mix.install for code generation:
✅ Portable - One file, no setup required
✅ Reproducible - Same input = same output
✅ Shareable - GitHub gist, email, anywhere
✅ Isolated - No impact on your main projects
✅ Fast - Generate code in seconds
Perfect for:
- Bug reports with minimal examples
- Quick prototyping
- CI/CD pipelines
- Teaching and demos
- Try a single-file example
- Choose your target framework
- Generate production code
- Customize via callbacks
- Deploy with confidence!