{"id":22281425,"url":"https://github.com/jlangch/venice","last_synced_at":"2026-04-06T08:02:36.053Z","repository":{"id":37445293,"uuid":"140467278","full_name":"jlangch/venice","owner":"jlangch","description":" Venice, a Clojure inspired sandboxed Lisp dialect with Java interoperability serving as a safe scripting language.","archived":false,"fork":false,"pushed_at":"2026-03-29T18:53:53.000Z","size":393896,"stargazers_count":43,"open_issues_count":0,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-03-29T20:49:51.465Z","etag":null,"topics":["clojure","devops","functional","functional-programming","java-interoperability","language","lisp","programming-language","repl","sandbox","scripting"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jlangch.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2018-07-10T17:36:48.000Z","updated_at":"2026-03-29T18:53:56.000Z","dependencies_parsed_at":"2024-01-16T23:53:05.784Z","dependency_job_id":"0b29e22c-f7b5-49f3-bac9-39a17afb6ccd","html_url":"https://github.com/jlangch/venice","commit_stats":null,"previous_names":[],"tags_count":281,"template":false,"template_full_name":null,"purl":"pkg:github/jlangch/venice","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlangch%2Fvenice","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlangch%2Fvenice/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlangch%2Fvenice/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlangch%2Fvenice/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jlangch","download_url":"https://codeload.github.com/jlangch/venice/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlangch%2Fvenice/sbom","scorecard":{"id":49186,"data":{"date":"2025-08-04","repo":{"name":"github.com/jlangch/venice","commit":"43211fdb907a90ceae6bcb389d2eca0ea47c06e2"},"scorecard":{"version":"v5.2.1-28-gc1d103a9","commit":"c1d103a9bb9f635ec7260bf9aa0699466fa4be0e"},"score":4.6,"checks":[{"name":"Maintained","score":10,"reason":"30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#security-policy"}},{"name":"SAST","score":10,"reason":"SAST tool detected: CodeQL","details":["Info: SAST configuration detected: CodeQL","Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#license"}},{"name":"Binary-Artifacts","score":6,"reason":"binaries present in source code","details":["Warn: binary detected: doc/pdfs/fonts.jar:1","Warn: binary detected: gradle/wrapper/gradle-wrapper.jar:1","Warn: binary detected: lib/provided/nanojson-1.3-sources.jar:1","Warn: binary detected: lib/provided/nanojson-1.3.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#binary-artifacts"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#branch-protection"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Info: Possibly incomplete results: error parsing shell code: reached EOF without closing quote \": doc/examples/scripts/shebang-demo.venice:0","Info: Possibly incomplete results: error parsing shell code: reached EOF without closing quote \": src/main/resources/com/github/jlangch/venice/setup/shebang-demo.venice:0","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/jlangch/venice/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/jlangch/venice/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/jlangch/venice/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/jlangch/venice/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/jlangch/venice/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/jlangch/venice/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/jlangch/venice/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/jlangch/venice/codeql-analysis.yml/master?enable=pin","Info:   0 out of   7 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#pinned-dependencies"}}]},"last_synced_at":"2025-08-14T23:23:02.684Z","repository_id":37445293,"created_at":"2025-08-14T23:23:02.684Z","updated_at":"2025-08-14T23:23:02.684Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31464118,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T21:22:52.476Z","status":"online","status_checked_at":"2026-04-06T02:00:07.287Z","response_time":112,"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":["clojure","devops","functional","functional-programming","java-interoperability","language","lisp","programming-language","repl","sandbox","scripting"],"created_at":"2024-12-03T16:17:59.191Z","updated_at":"2026-04-06T08:02:36.047Z","avatar_url":"https://github.com/jlangch.png","language":"Java","readme":"\n\u003cimg src=\"https://github.com/jlangch/venice/blob/master/doc/logo/logo-readme.png\" width=\"1024\"\u003e\n\n[![](https://github.com/jlangch/venice/blob/master/doc/maven-central.svg)](https://central.sonatype.com/artifact/com.github.jlangch/venice)\n[![](https://github.com/jlangch/venice/blob/master/doc/license.svg)](./LICENSE)\n![Java Version](https://img.shields.io/badge/java-%3E%3D%201.8-success)\n[![CI](https://github.com/jlangch/venice/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/jlangch/venice/actions/workflows/ci.yml)\n\n[![Release (latest by date)](https://img.shields.io/github/v/release/jlangch/venice)](https://github.com/jlangch/venice/releases/latest)\n[![Release Date](https://img.shields.io/github/release-date/jlangch/venice?color=blue)](https://github.com/jlangch/venice/releases/latest)\n[![GitHub commits since latest release (by date)](https://img.shields.io/github/commits-since/jlangch/venice/latest)](https://github.com/jlangch/venice/commits/)\n\n \n \n\n*“Living is worthwhile if one can contribute in some small way to this endless chain of progress.”*\n― Paul A.M. Dirac \n\n \n \n \n\n# Venice\n\nVenice is a Clojure inspired sandboxed Lisp dialect with excellent Java \ninteroperability.\n\n \n \n\n## Overview\n\nVenice is a Lisp dialect born from the need for a safe, sandboxed, \ngeneral-purpose language. It shares with Lisp the code-as-data philosophy \nand a powerful macro system. \n\nVenice is mainly a functional programming language focusing on immutable, \npersistent data structures.\n\nVenice supports macros, tail-recursion, dynamic code loading, multimethods, \nprotocols and many more. It comes with excellent Java interoperability, and\na configurable sandbox that can prevent all sorts of unwanted JVM and Venice \ninteractions. Venice has been designed from the ground-up with a sandbox, \nmaking it a first class citizen.\n\nVenice includes a comprehensive library of over 1000 functions. Its \nimmutable persistent data structures, along with Clojure-style atoms, futures, \npromises, and agents, greatly simplify the process of writing concurrent code.\n\nVenice seamlessly and transparently integrates with Java and any third-party \nlibraries, giving you access to a vast array of libraries, frameworks, and \ntools.\n\nVenice's strength is making complex scripting and automation tasks easy. Have you ever \nfelt limited by Bash or PowerShell scripts? With Venice, you can write \nconcise and elegant platform independent scripts effortlessly.\n\nVenice does not depend on any runtime libraries (other than the JVM). You \ncan easily add it as a standalone JAR to your classpath.\n\nVenice requires Java 8 or newer.\n\n \n \n\n## Documentation\n\n[Cheat Sheet](https://cdn.rawgit.com/jlangch/venice/78aea15/cheatsheet.pdf)\n \n\n[Change Log](ChangeLog.md)\n\n \n \n\n## Quickstart\n\nGrab the Venice JAR from Maven:\n \n``` shell\ncurl -O https://repo1.maven.org/maven2/com/github/jlangch/venice/1.12.88/venice-1.12.88.jar\n```\n\n \n\nSetup a REPL in the directory `./repl`:\n\n``` shell\njava -jar venice-1.12.88.jar -setup -colors -dir ./repl\n```\n\n \n\nStart the REPL from a terminal:\n\n| Linux, MacOS ¹⁾       |  Windows ²⁾              |\n| :-                    | :-                       |\n| `/path-to-repl/repl.sh` | `C:\\path-to-repl\\repl.bat` |\n\n¹⁾ Alternatively double-click on `/path-to-repl/repl.command` in the *MacOS Finder*\n\n²⁾ Alternatively double-click on `/path-to-repl/repl.bat` in the *File Explorer* \n\n \n\nIn the REPL run an expression like `(+ 1 1)`:\n\n```\nvenice\u003e (+ 1 1)\n=\u003e 2\n\nvenice\u003e\n```\n\n \n \n\n## Language\n\n* [Getting started](doc/readme/start.md)\n* REPL\n    * [Basics](doc/readme/repl.md)\n    * [Advanced](doc/readme/repl-advanced.md)\n    * [Sandbox](doc/readme/repl-sandbox.md)\n    * [Remote](doc/readme/repl-remote.md)\n* [On Functional Programming](doc/readme/functional-about.md)\n* [First Steps in Venice](doc/readme/functional-first-steps.md)\n* [Example: Sudoku Solver](doc/readme/sudoku-solver.md)\n* [Execute Venice scripts](doc/readme/execute-scripts.md)\n* [Embedding Venice in Java](doc/readme/embedding.md)\n* [Datatypes](doc/readme/datatypes.md)\n* [Custom Datatypes](doc/readme/datatypes-custom.md)\n* [Lazy Sequences](doc/readme/lazy-seq.md)\n* [Functions](doc/readme/functions.md)\n* [Control Flow](doc/readme/control-flow.md)\n* [Filter-Map-Reduce](doc/readme/filter-map-reduce.md)\n* [Transducers](doc/readme/transducers.md)\n* [Recursion](doc/readme/recursion.md)\n* [Mutable Refs](doc/readme/refs.md)\n* [Destructuring](doc/readme/destructuring.md)\n* [Advanced string features](doc/readme/advanced-strings.md)\n* [Concurrency](doc/readme/concurrency.md)\n* [Java interoperability](doc/readme/java-interop.md)\n* [Namespaces](doc/readme/namespace.md)\n* [Exception handling](doc/readme/exceptions.md)\n* [Multimethods and Protocols](doc/readme/multimethods-and-protocols.md)\n* [Macros](doc/readme/macros.md)\n* [Sandbox](doc/readme/sandbox.md)\n* [Tree walker](doc/readme/walk.md)\n\n**Documents**\n\n* [JSON](doc/readme/json.md)\n* [JSON Lines](doc/readme/json-lines.md)\n* [CSV](doc/readme/csv.md)\n* [XML](doc/readme/ext-xml.md)\n* [PDF](doc/readme/pdf.md)\n* [EXCEL](doc/readme/excel.md)\n* [Charts](doc/readme/charts.md)\n* [ASCII Tables](doc/readme/ascii-tables.md)\n\n**Modules**\n\n* [Cryptography](doc/readme/cryptography.md)\n* [Inter-Process-Communication (Messaging)](doc/readme/ipc.md)\n* [Docker](doc/readme/docker.md)\n* [Kira Templates](doc/readme/ext-kira.md)\n* [Parsifal Parser Combinator](doc/readme/ext-parsifal.md)\n* [HTTP Client (Java 8+)](doc/readme/http-client-j8.md)\n* [Venice meets LLMs](doc/readme/venice-meets-llms.md)\n* [Database (JDBC)](doc/readme/database.md)\n* [More Extension modules](doc/readme/extension-modules.md)\n\n**/etc**\n\n* [Writing Shell Scripts](doc/readme/shell-scripts.md)\n* [Benchmarks](doc/readme/benchmarks.md)\n* [Multi-File Apps](doc/readme/multi-file-app.md)\n* [Development Tools](doc/readme/dev-tools.md)\n* [Build dependencies](doc/readme/build-dependencies.md)\n* [Source Code as PDF](doc/readme/source2pdf.md)\n* [Performance comparison Venice - Clojure - Java](doc/readme/performance.md)\n\n \n## Getting the latest release\n\nYou can can pull it from the central Maven repositories:\n\n```\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.github.jlangch\u003c/groupId\u003e\n  \u003cartifactId\u003evenice\u003c/artifactId\u003e\n  \u003cversion\u003e1.12.88\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n \n \n\n## Building\n\nFrom a command shell, run `./gradlew shadowJar` in the project home dir, to invoke the Gradle task to build the Venice JAR.\n\n**On MacOS / Linux**\n\nGive `gradlew` execute permission after cloning the Venice git repository ...\n\n``` shell\nvenice% chmod +x ./gradlew\n```\n\n... and build the project\n\n``` shell\nvenice% ./gradlew clean shadowJar\n```\n\n**On Windows**\n\n```\nC:\\Users\\foo\\venice\u003e gradlew.bat clean shadowJar\n```\n\n \n \n\n## Contributing\n\nI accept Pull Requests via GitHub. There are some guidelines which will make applying PRs easier for me:\n\n- No tabs! Please use spaces for indentation.\n- Respect the existing code style for each file.\n- Create minimal diffs - disable on save actions like reformat source code or organize imports. If you feel the source code should be reformatted create a separate PR for this change.\n- Provide JUnit tests for your changes and make sure your changes don't break any existing tests by running gradle.\n\n \n \n\n## License\n\nThis code is licensed under the [Apache License v2](LICENSE).\n\n \n \n\n## 3rd Party Open Source\n\n* [Copyright Notice](doc/readme/3rdparty-lic.md)\n\n \n \n\n## Stargazers over time\n\n[![Stargazers over time](https://starchart.cc/jlangch/venice.svg?background=%23FFFFFF\u0026axis=%23989797\u0026line=%230b41d6)](https://starchart.cc/jlangch/venice)\n\n","funding_links":[],"categories":["JVM语言","Languages"],"sub_categories":["Java"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjlangch%2Fvenice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjlangch%2Fvenice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjlangch%2Fvenice/lists"}