We're really excited for this release. There's a lot in here, and much of it is stuff we've wanted to do forever. We hope this update enables you to do more with your cannolis, and use them in more places than just your Obsidian vault.
There is also quite a bit that we cut from this release, because if we didn't force ourselves to stop adding things it probably never would have come out. This means that there is more on the way, and we have big plans.
Cannoli is complicated, and there are a lot of moving parts. It's possible this release broke something that used to work in your Cannolis, left confusing things undocumented, or who knows what. Please come talk to us about it in the new [discord](https://discord.gg/wzayNxpxvR), or just chat and share some cannolis you've made!
>[!faq] Update Cannoli College!
>These release notes link to some new canvases in the Cannoli College, be sure to delete and re-add the college folder in cannoli settings.
## Run cannolis anywhere
We've published an [npm package](https://www.npmjs.com/package/@deablabs/cannoli-core), which can take in any [JSON Canvas](https://jsoncanvas.org/) object (what .canvas files are), and run it as a cannoli. This means that anywhere you can run javascript, you can run cannolis.
There's still a lot more to be done on this package, and if you have questions about how to use it, or suggestions about how you'd like to use it, please come chat on the discord.
To help you iterate on cannolis for use in your projects, we've added the Bake commands.
## Baking
The bake command will put the canvas file you're working on in a Javascript/Typescript code file along with all of the necessary arguments. The result is a function which uses the [[Input and Output nodes]] on the cannoli as parameters and returns.
You can edit your language, runtime, and formatting preferences in the cannoli settings.
Runtimes:
- Node (20 or higher for now, let us know if you'd like to see this change)
- Deno
- Bun
In addition to the "Bake" command, there's also a "Bake to Val Town" command.
## Val Town
This update introduces several integrations with [Val Town](https://www.val.town/), a very easy way to run code in the cloud. It's got a generous free tier and you can grab an API key in a few minutes.
Cannoli can now use your Val Town key for a few things:
- Bake a cannoli as a val
- You can save a cannoli as a val, and instantly have an API that simply takes in the inputs of cannoli in a post request and returns the results
- Manage cannoli vals
- Use the "View vals" command to see the cannoli val endpoints you currently have set up, get their urls, and update them
- Send emails
- There's a built in [valtown-email](obsidian://open?vault=cannoli-test&file=Cannoli%20College%2F6.%20Built-in%20Actions%2F5.%20Val%20Town%20Email.canvas) action that uses your Val Town key to [send an email](https://docs.val.town/std/email/)
- Evaluate code
- The [valtown-eval](obsidian://open?vault=cannoli-test&file=Cannoli%20College%2F6.%20Built-in%20Actions%2F4.%20Val%20Town%20Evaluate.canvas)action allows you to evaluate javascript/typescript code directly from your cannolis, using their [Eval API](https://docs.val.town/openapi#tag/vals/POST/v1/eval)
- Use Claude
- Cannoli currently needs a proxy server to interact with Anthropic's APIs from Obsidian. We made a button that can set up such a server on Val Town as a workaround in the meantime.
## Vision
If you embed an image in markdown formatting, from either your vault or the web, an LLM will see it!
`![[image_on_vault.jpg]]`
`![](image-on-web.com)`
![[Pasted image 20240811223509.png]]
Images embedded this way will be sent to image-capable LLMs along with the chat content. See an example in the [Cannoli College](obsidian://open?vault=cannoli-test&file=Cannoli%20College%2F7.%20Additional%20features%2F1.%20Vision.canvas)
## Parallel Groups
Parallel groups allow you to run the same group of nodes across multiple inputs, defined statically or dynamically. Learn more about them in the [Cannoli College](obsidian://open?vault=cannoli-test&file=Cannoli%20College%2F5.%20Groups%2F4.%20Parallel%20groups.canvas).
![[Pasted image 20240811222646.png]]
## Action nodes
We revamped action nodes, and now have some built-in ones, with more on the way. See more in the Cannoli College: [Action nodes](obsidian://open?vault=cannoli-test&file=Cannoli%20College%2F3.%20Special%20nodes%2F2.%20Action%20nodes.canvas), [built-in actions](obsidian://open?vault=cannoli-test&file=Cannoli%20College%2F6.%20Built-in%20Actions%2F1.%20Dalle.canvas)
Action nodes are also really easy to make and import to your own baked cannolis, it's as easy as making an object with a "name" and a "function" property and passing it in with the cannoli.
## Even more
- You can now reference floating nodes without square brackets
- Secrets vault in Cannoli Settings
- Enter "secrets" that can be passed to cannolis via config arrows, without actually encoding them within your cannoli
- *Secrets are not encrypted, and are stored in your vault with other plugin settings in plain text
- Add "Multi-Edges" feature
- Pass many variables across a single edge by separating their names with newlines
- Add "cannoli" labelled group scoping
- A cannoli canvas with a group named "cannoli" will only execute the contents of that group when run
- Improve HTTP templates
- Inject variables anywhere in the template, not just the body
- Remove cost estimation (a bit too much to manage atm with all of the providers and models changing), instead you can now limit number of AI requests made and prompt tokens used.
- Fix many smaller bugs and annoyances