
Security News
AGENTS.md Gains Traction as an Open Format for AI Coding Agents
AGENTS.md is a fast-growing open format giving AI coding agents a shared, predictable way to understand project setup, style, and workflows.
@createdreamtech/carti
Advanced tools
Carti is a package manager for Cartesi that enables developers to publish and reuse Cartesi assets such as ROM, RAM and flash drives, as well as organizing those assets into full machine configurations in a shareable and discoverable way.
nodejs v15.x.x or greater
# I recommend using nvm
# https://github.com/nvm-sh/nvm
# example usage: nvm use v15.0.1
# Suggestion to run the entire tutorial install docker
npm install -g @createdreamtech/carti
carti --help
carti version
carti machine install -g --nobundle --nobuild \
https://raw.githubusercontent.com/createdreamtech/carti-default/main/carti-machine-package.json
mkdir carti-example
cd carti-example
carti machine init
cat carti-machine-package.json
carti machine install carti-machine-package.json
# This outputs by default a mountable build directory that contains all the bundles related to your machine
as well as a machine-config.lua
For more insights visit the website
Carti provides a command line interface (CLI) for the following major tasks:
ext2
file representing a flash drive with a cross-compiled utility) in order to allow those assets to be indexed, stored and retrieved from remote locationsA developer creates a Cartesi Machine that includes a flash drive with a utility that was cross-compiled for RISC-V (for instance, the utility for computing Dogecoin/Litecoin hashes using libscrypt
, as detailed in the Descartes Tutorials). Other users would like to build machines using that utility, but without having to repeat all the original work - which may indeed be very complex if there are many dependencies involved.
First, the developer bundles and publishes the corresponding ext2
file:
carti bundle --type flash --name scrypt-hash --version 1.0.0 scrypt-hash.ext2
carti publish s3 --bucket xyz scrypt-hash
At this point the publish
command has recorded the bundle's metadata and remote S3 asset location in the local bundles.json
repository index file. This index file can then be committed to Git, so that it becomes available at the URL https://raw.githubusercontent.com/my-org/my-repo/main/bundles.json.
Another user that wishes to reuse this drive for his own Cartesi Machine then adds the original developer's repository and installs the desired bundle:
carti repo add https://raw.githubusercontent.com/my-org/my-repo/main/bundles.json
carti install scrypt-hash
Finally, the user can build a Cartesi Machine using the installed asset, here using the which
command to more easily retrieve the asset's path in the local filesystem:
cartesi-machine \
--flash-drive="label:scrypt-hash,filename:$(carti which -py scrypt-hash)" \
--flash-drive="label:input,length:1<<12" \
--flash-drive="label:output,length:1<<12" \
-- $'cd /mnt/scrypt-hash ; ./scrypt-hash $(flashdrive input) $(flashdrive output)'
A developer wishes to allow other users to run his Cartesi Machine. This could be accomplished by simply providing the full stored machine (as described in the Cartesi documentation), but that would entail uploading a large amount of data that is almost entirely already available online, such as the contents of the kernel and rootfs
drive. In this context, Carti can be used to create and publish a lightweight Cartesi Machine configuration that can handle bundles referring to remotely stored assets.
First, the developer extracts the Lua configuration for his Cartesi Machine and creates a corresponding Carti machine configuration referring to published bundles:
carti machine publish s3 --bucket xyz machine-config.lua > carti-machine.json
The generated carti-machine.json
file is then distributed, and another user downloads it. The user then installs the machine, so as to retrieve all remote assets and build a regular Cartesi Machine configuration in Lua, that only refers to local files:
carti machine install carti-machine.json > machine-config.lua
The user then instantiates and runs the machine using the Cartesi Machine Lua interface, as explained in the Cartesi documentation.
Being a human-readable JSON file, the user can then customize the machine configuration, for example by changing the command line. He can also update the version of the referenced bundles, for instance to retrieve a newer version that fixes a bug.
See the open issues for a list of proposed features (and known issues).
How to contribute, build and release are outlined in CONTRIBUTING.md, BUILDING.md and RELEASING.md respectively. Commits in this repository follow the CONVENTIONAL_COMMITS.md specification.
Apache License 2.0
FAQs
A cartesi machine package manager
We found that @createdreamtech/carti demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
AGENTS.md is a fast-growing open format giving AI coding agents a shared, predictable way to understand project setup, style, and workflows.
Security News
/Research
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.