{"id":51136022,"url":"https://github.com/if-not-nil/revo","last_synced_at":"2026-07-14T01:00:48.596Z","repository":{"id":356388116,"uuid":"1232030951","full_name":"if-not-nil/revo","owner":"if-not-nil","description":"a dynamic language for the joy of programming","archived":false,"fork":false,"pushed_at":"2026-06-28T09:35:01.000Z","size":2052,"stargazers_count":193,"open_issues_count":0,"forks_count":7,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-28T11:15:08.658Z","etag":null,"topics":["language","programming-language"],"latest_commit_sha":null,"homepage":"https://gills.pages.dev/revo","language":"Zig","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/if-not-nil.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-07T14:18:56.000Z","updated_at":"2026-06-28T09:35:04.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/if-not-nil/revo","commit_stats":null,"previous_names":["if-not-nil/revo"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/if-not-nil/revo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/if-not-nil%2Frevo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/if-not-nil%2Frevo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/if-not-nil%2Frevo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/if-not-nil%2Frevo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/if-not-nil","download_url":"https://codeload.github.com/if-not-nil/revo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/if-not-nil%2Frevo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35441637,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-13T02:00:06.543Z","response_time":119,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["language","programming-language"],"created_at":"2026-06-25T18:00:29.297Z","updated_at":"2026-07-14T01:00:48.589Z","avatar_url":"https://github.com/if-not-nil.png","language":"Zig","funding_links":[],"categories":["Zig"],"sub_categories":[],"readme":"# `revo, the programming language\n\n  \n[homepage \u0026 docs](https://gills.pages.dev/revo)\n| [github](https://github.com/if-not-nil/revo)\n| [learn](https://gills.pages.dev/revo/basics)\n| [chat \u0026 discuss](https://discord.com/invite/XzGWh7TX59)\n\nan expressive, dynamically-typed language for the joy of programming\n\n![written in Zig](https://img.shields.io/badge/written%20in-Zig-orange)  ![version 0.0.0](https://img.shields.io/badge/version-0.0.1a-navy)\n\n- [introduction](#introduction)\n- [installing](#installing)\n  - [on posix systems](#on-posix-systems)\n  - [windows](#windows)\n- [usage](#usage)\n- [development](#development)\n- [credits](#credits)\n- [license](#license)\n\n# introduction\n\n```ruby\n# =======================\n# everything is something\n# =======================\nlet x = do # 15\n    let y = 5 + 10\n    y\nend\n\n# =====\n# pipes\n# =====\nlet x = \"hello\"\n  |\u003e _:upper()\n  |\u003e _:sub(1, 2)\n  |\u003e assert_eq(\"el\")\n  |\u003e do\n    let el = _\n    \"h\" + el + \"lo\"\n  end\n  |\u003e assert_eq(\"hello\")\n\n# ===============================\n# pattern matching \u0026 result types\n# ===============================\nfn safe_div(a, b)\n  if b == 0 (:err, :DivByZero)\n  else (:ok, a / b)\n\nmatch safe_div(10, 2)\n  | (:ok, v)  =\u003e print(v) # 5\n  | (:err, e) =\u003e print(e)\n\n# =============================================================\n# seamless concurrency\n# \u003e write blocking code,\n# \u003e then make it non-blocking by putting `spawn` in front of it\n# =============================================================\nconst h = spawn fn() add(20, 22)\njoin(h) # 42\n\nlet ch = chan()\nfn worker(n) do\n  if n == 6 do\n    send(ch, :done)\n    return n\n  end\n  sleep(n * 100)\n  send(ch, n * 10)\nend\n\nfor i in 0..7\n  spawn worker(n)\n\nloop match recv(ch)\n  | :done =\u003e break :done \n  | x =\u003e print(\"got\", x)\n\n# ============================================================\n# first-class testing\n# \u003e test blocks get compiled \u0026 ran with the `--test` flag only\n# ============================================================\n\nfn add(a, b) a + b\nfn mul(a, b) a * b\n\ntest \"mul works\" expect_eq(add(21, 21), 42)?\n\nsuite \"math\" do\n  const N = 20\n  const check_mul(a, b)\n    expect(mul(a + b) == a * b)\n\n  test \"addition\" do\n    expect(add(N, 22) == 42)?\n    expect(add(20, 22) != 22)?\n  end\n\n  test \"multiplication\" do\n    check_mul(6, 7)?\n    check_mul(20, 22)?\n  end\nend\n```\n\n## simple embedding api\n\n```c\n#include \"revo.h\"\n\nErevoVM *vm = erevo_vm_create();\nif (!vm) return 1;\n\nErevoProgram *program = erevo_compile(vm, \"main.rv\", \"1 + 2\");\nif (!program) {\n  puts(erevo_vm_last_error(vm));\n  return 1;\n}\n\nErevoData result;\nif (!erevo_run(vm, program, \u0026result)) {\n  puts(erevo_vm_last_error(vm));\n}\n\nif (!erevo_eval(vm, \"main.rv\", \"1 + 2\", \u0026result)) {\n  puts(erevo_vm_last_error(vm));\n}\n\nerevo_program_destroy(program);\nerevo_vm_destroy(vm);\n```\n\n\n# installing\nbinary releases are not yet available\n\nyou will need [the latest **stable** version of zig](https://ziglang.org/download) to build revo (`0.16.0` at the moment)\n\navailable on most package managers as `zig`\n\n## on posix (linux/bsd/mac)\n\n```bash \ngit clone https://github.com/if-not-nil/revo --recursive \u0026\u0026 cd revo\ngit submodule update --init --recursive\nzig build --fetch\n# or -Doptimize=ReleaseSmall for a smaller executable\nzig build -Doptimize=ReleaseFast\ncp ./zig-out/bin/revo ~/.local/bin/revo\n\n# should output the version\nrevo --version\n```\n\n### repl\n\nthe default REPL backend is [isocline](https://github.com/daanx/isocline):\n- repl history saved to `~/.revo_history`\n- multi-line expressions are shift+enter or C-j\n- tab completion for revo keywords, commands (`:q`, `:clear`, `:backend`), and stdlib modules\n- go to matching brace with M-b\n- ctrl+r for searching through history\n\nyou can also get a dumb repl by doing `-Dfeatures=lsp` (no isocline) or `-Dfeatures=` (no features at all)\n\n### packaging:\n- AUR: `revo-git` ([info \u0026 pkgbuild](https://aur.archlinux.org/packages/revo-git))\n\n## windows\n\n```bash\ngit clone https://github.com/if-not-nil/revo \u0026\u0026 cd revo\nzig build --fetch -Doptimize=ReleaseFast\n\nmkdir \"C:/tools/revo/bin\"\ncopy ./zig-out/bin/revo C:/tools/revo/bin\n\n# now add it to PATH by doing:\n# - Win+S -\u003e `env` -\u003e \u003cEnter\u003e\n# - click \"Environment Variables\" and then \"Path\" in the \"System variables\"\n# - add new at \"C:\\tools\\revo\\bin\"\n#    , or put it in one of the existing ones, if you know what you're doing\n# - press OK for all of the tabs you've opened\n# after that, you have to open a new CMD/Powershell window for PATH changes to take effect\n\n# verify installation\nrevo --version\n```\n*note - the windows version does not yet have an async backend or a full-featured line editor. the latter is the easiest to add, a windows contributor might want to take a look at [./src/repl.zig](./src/repl.zig)*\n\n# usage\n\n```bash\nusage: revo [options] [script [args...]]\n\noptions:\n  -e code          run code\n  -i               enter interactive mode after executing\n  -d               output the last value the program evaluated\n  -b               compile script to bytecode (.rvo)\n  -o path          output path for -b (default: input with .rvo extension)\n  --test           run test blocks\n  --bench[n]       run with performance counters ([n] iterations, 1 if not specified)\n  --dis            show bytecode disassembly instead of running\n  -h, --help       show this help message\n  --version        show version\n\nexamples:\n  revo                           start interactive REPL\n  revo script.rv                 run script\n  revo -e \"1 + 2\"                run inline code\n  revo -e \"1 + 2\" -i             run inline code and enter REPL\n  revo -b script.rv              compile script to bytecode\n  revo -b -o output.rvo script   compile script with custom output path\n  revo --bench script.rv         run with performance counters\n  revo --dis script.rv           show bytecode disassembly\n```\n\n## development\n\n### building\n\n```bash\nzig build # debug build\nzig build run # debug run (repl implementation is hardcoded to a very simple one)\nzig build -Doptimize=ReleaseFast # release build\nzig build -Dfeatures=lsp,isocline # to pick features (both are included by default)\n# build C library + auto-generated header\n# check zig-out/include/, zig-out/lib/\nzig build lib \n```\n\n**note:** the C library and header are only built with `zig build lib`.\nthe auto-generated header is always in sync with exported functions, marked with `callconv(\"c\")`\n\n### running tests\n\n```bash\nzig build test --summary all \n# opt: -Dtest-filter=\"some test name filter\"\n```\n\n### revolt (the language server)\n\nrevo ships an LSP server at `src/lsp/`. it handles diagnostics, go-to-definition, hover,\nreferences, document symbols, and workspace symbols.\n\nrelease builds bundle the LSP directly! run `revo --lsp` to start it.\ndebug builds skip it by default; use `-Doptimize=ReleaseFast` to enable it, or\n`-Dnolsp` to exclude it from any build.\n\nto build the standalone server binary:\n\n```bash\nzig build lsp\n```\n\nthe binary lands at `zig-out/bin/revolt`\n\n#### neovim setup\n\n```lua\nvim.lsp.config('revolt', {\n  cmd = { 'revo', '--lsp' },\n  filetypes = { 'rv' },\n  root_markers = { 'lib.json', 'exe.json', '.git' },\n})\nvim.lsp.enable('revolt')\n```\n\nsee [docs/lsp.md](src/lsp/README.md) for the full feature list, troubleshooting, and other editors\n\n### contributing\n\nrecommending to a friend is always greatly appreciated. any contributions are welcome!\n\nyou can contribute via github, codeberg or via [emailing me a .patch](mailto:lung-notification@proton.me)\n\nsee [CONTRIBUTING.md](./CONTRIBUTING.md)\n\n## credits\n\n- [isocline](https://github.com/daanx/isocline) by daanx - MIT\n- [lsp-kit](https://github.com/zigtools/lsp-kit) by the zigtools team - MIT\n\n# license\n\nrevo is licensed under [MIT.](https://mit-license.org/) see the [LICENSE.txt](./LICENSE.txt) file for details\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fif-not-nil%2Frevo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fif-not-nil%2Frevo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fif-not-nil%2Frevo/lists"}