This monorepo hosts a variety of applications and libraries written in Clojure providing access to all aspects of the Convex stack with additional capabilities à la carte.
Since some key aspects of Convex have been modeled on Clojure constructs. Hence, there is no surprise in realizing that both form a unique and perfect match. Even without having any interest in blockchain, it is still worth exploring features offered by this repository such as the immutable Etch database.
Overview of main folders in the ./project directory:
Project | Purpose |
---|---|
:project/app.fuzz | CLI multicore fuzzy tester, generates and tests random Convex Lisp forms |
:project/break | Advanced generative test suite for the CVM ; novel smart contract testing |
:project/clojurify | Convex <-> Clojure data conversions, quick evaluation, useful test.check generators |
:project/crypto | Key pair creation and management for digital signing |
:project/cvm | Convex types, reading Convex Lisp code, execution |
:project/db | Create and handle immutable Etch databases crafted for Convex types |
:project/net | Convex network stack (running peers and using the binary client) |
:project/recipe | Recipes for understanding Convex and writing dApps |
:project/run | Convex Lisp Runner and REPL, advanced terminal environment |
Recipes are key to reach a high-level understanding of Convex and understanding how to use all those utilities to write decentralized applications. They provide an easy way for experimenting key concepts by cloning/forking this repository.
Released applications and libraries:
Project | Library | Cljdoc | Download |
---|---|---|---|
:project/clojurify | / | ||
:project/crypto | / | ||
:project/cvm | / | ||
:project/db | / | ||
:project/net | / | ||
:project/run | CVX runner |
Each project follows a predictable structure:
./src
directory of each project or subprojectclj
, cvx
) and then by purpose (eg. main
, test
)The following conventions are enforced in READMEs and source files:
convex
into $
: convex.cvm
-> $.cvm
+
at the end: items
-> item+
Following sections are only useful for managing this repository or experimenting with a clone/fork.
This repository rely on the Clojure command line tools. Familiarity with Clojure Deps is required.
Alias names follow the convention established in Maestro. For instance, see project aliases in table above.
All scripting is done using Babashka, a fast Clojure interpreter that comes with a powerful task runner. Follow this simple installation process.
All tasks are written in ./bb.edn and can by listed by running in your shell:
bb tasks
Printed list shows all current tasks available for managing this repository: starting dev mode, running some tests, compiling, etc.
A task typically requires one or several aliases from deps.edn
and sometimes CLI arguments.
For instance:
# Starts project 'CVM' in dev mode which is an alias in `deps.edn` + personal `:nrepl` alias
$ bb dev :project/cvm:nrepl
# Testings all namespaces for project 'break' and dependencies
$ bb test :project/break
Following directory structure, each project typically has a dev_templ.clj
file in its Clojure dev files which requires useful namespaces.
This file can be copied in the same directory to dev.clj
for hacking and trying thing out. Those dev.clj
files are effectively private and will
not appear in this repository.
For example, see :project/all
dev directory.
Copyright © 2021 Adam Helinski, the Convex Foundation, and contributors
Licensed under the Apache License, Version 2.0
Can you improve this documentation? These fine people already did:
Adam Helinski & Adam HelinsEdit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close