Liking cljdoc? Tell your friends :D

Any aspect of the Convex stack

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:

ProjectPurpose
:project/app.fuzzCLI multicore fuzzy tester, generates and tests random Convex Lisp forms
:project/breakAdvanced generative test suite for the CVM ; novel smart contract testing
:project/clojurifyConvex <-> Clojure data conversions, quick evaluation, useful test.check generators
:project/cryptoKey pair creation and management for digital signing
:project/cvmConvex types, reading Convex Lisp code, execution
:project/dbCreate and handle immutable Etch databases crafted for Convex types
:project/netConvex network stack (running peers and using the binary client)
:project/recipeRecipes for understanding Convex and writing dApps
:project/runConvex 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.

Releases

Released applications and libraries:

ProjectLibraryCljdocDownload
:project/clojurifyClojarscljdoc/
:project/cryptoClojarscljdoc/
:project/cvmClojarscljdoc/
:project/dbClojarscljdoc/
:project/netClojarscljdoc/
:project/runClojarscljdocCVX runner

Structure

Each project follows a predictable structure:

  • Project details are exposed in a dedicated README
  • All source is located under the ./src directory of each project or subproject
  • Source is subdivided by language (eg. clj, cvx) and then by purpose (eg. main, test)
  • All scripts and tasks are located and executed at the root of this repository

Conventions

The following conventions are enforced in READMEs and source files:

  • Namespaces shorten convex into $: convex.cvm -> $.cvm
  • Symbols referring to collections are pluralized with + at the end: items -> item+

Maintenance

Following sections are only useful for managing this repository or experimenting with a clone/fork.

Clojure Deps

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.

Babashka and tasks

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

Dev

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.

License

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 Helins
Edit on GitHub

cljdoc is a website building & hosting documentation for Clojure/Script libraries

× close