<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Jam Tools</title><link>/</link><description>Recent content on Jam Tools</description><generator>Hugo</generator><language>en</language><lastBuildDate>Mon, 02 Dec 2024 14:38:33 +0200</lastBuildDate><atom:link href="/index.xml" rel="self" type="application/rss+xml"/><item><title>Overview</title><link>/docs/springboard/overview/</link><pubDate>Thu, 07 Sep 2023 16:13:18 +0200</pubDate><guid>/docs/springboard/overview/</guid><description>&lt;p>Springboard is a modular cross-platform application builder and runtime library that allows you to build applications that can run in a web browser, a desktop app, or a mobile app, and have type-safe communication between different contexts. The framework was built out of the necessity of creating MIDI applications deployed in a fullstack web application context, and simultaneously allowing the application to run standalone in the browser for maximum portability.&lt;/p></description></item><item><title>Module Development</title><link>/docs/springboard/module-development/</link><pubDate>Thu, 07 Sep 2023 16:13:18 +0200</pubDate><guid>/docs/springboard/module-development/</guid><description>&lt;p>A Springboard application is typically comprised of several modules. A given module uses the &lt;a href="../typedoc_docs/module_api/classes/ModuleAPI.md">ModuleAPI&lt;/a> to register components, actions, and states with the application. When a module is initialized, it&amp;rsquo;s given its own copy of the &lt;code>ModuleAPI&lt;/code>. Any actions or states created will be scoped to the given module&amp;rsquo;s state namespace behind the scenes.&lt;/p></description></item><item><title>Overview</title><link>/docs/introduction/overview/</link><pubDate>Thu, 07 Sep 2023 16:13:18 +0200</pubDate><guid>/docs/introduction/overview/</guid><description>&lt;p>Want to control your DAW with your phone? Check out the &lt;a href="/docs/introduction/quickstart">Quickstart&lt;/a> to get going!&lt;/p>
&lt;hr>
&lt;p>The framework behind Jam Tools applications consists of the following components:&lt;/p></description></item><item><title>Overview</title><link>/docs/jamtools/overview/</link><pubDate>Thu, 07 Sep 2023 16:13:18 +0200</pubDate><guid>/docs/jamtools/overview/</guid><description>&lt;p>Springboard is heavily influenced by the requirements of Jam Tools, which entails:&lt;/p>
&lt;ul>
&lt;li>Easily interact with MIDI instruments&lt;/li>
&lt;li>Configure the MIDI instruments from a device other than the device with the MIDI instruments connected&lt;/li>
&lt;li>Be able to run the application as a fullstack app or as a standalone browser application&lt;/li>
&lt;li>Have the feature-level and UI code &amp;ldquo;right next&amp;rdquo; to the related MIDI functionality (ideally it&amp;rsquo;s possible to have them in the same file)&lt;/li>
&lt;/ul>
&lt;p>The modules provided by the &lt;a href="https://npmjs.com/package/@jamtools/core">&lt;code>@jamtools/core&lt;/code>&lt;/a> package contain the relevant functionality develop your MIDI application. In particular:&lt;/p></description></item><item><title>Quickstart</title><link>/docs/introduction/quickstart/</link><pubDate>Thu, 07 Sep 2023 16:13:18 +0200</pubDate><guid>/docs/introduction/quickstart/</guid><description>&lt;ol>
&lt;li>
&lt;p>Install &lt;a href="https://nodejs.org/en/download/">Node.js&lt;/a>, and optionally &lt;a href="https://pnpm.io/installation">pnpm&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Use the npm package &lt;a href="https://www.npmjs.com/package/create-springboard-app">&lt;code>create-springboard-app&lt;/code>&lt;/a> to create a new app. This will initialize a new Node.js project with the Springboard CLI installed.&lt;/p></description></item><item><title>Background on Jam Tools</title><link>/blog/background-on-jam-tools/</link><pubDate>Mon, 02 Dec 2024 14:38:33 +0200</pubDate><guid>/blog/background-on-jam-tools/</guid><description>&lt;p>I&amp;rsquo;ve been wanting to have a public journal for my current efforts of software development, so here it is.&lt;/p>
&lt;p>Right now I&amp;rsquo;m focusing on 2 projects:&lt;/p></description></item><item><title>Example Post</title><link>/blog/example-post/</link><pubDate>Thu, 07 Sep 2023 16:27:22 +0200</pubDate><guid>/blog/example-post/</guid><description>You can use blog posts for announcing product updates and features.</description></item><item><title>RPC</title><link>/docs/springboard/rpc/</link><pubDate>Thu, 07 Sep 2023 16:13:18 +0200</pubDate><guid>/docs/springboard/rpc/</guid><description>&lt;h2 id="deployment-contexts">Deployment contexts&lt;/h2>
&lt;p>A Springboard application can be deployed and run in multiple ways. An application deployment can be offline-only, online-only, or a hybrid where features can swap between contexts.&lt;/p></description></item><item><title>Conditional Compilation</title><link>/docs/springboard/conditional-compilation/</link><pubDate>Thu, 07 Sep 2023 16:13:18 +0200</pubDate><guid>/docs/springboard/conditional-compilation/</guid><description>&lt;p>Springboard supports conditional compilation, which allows you to write code that is only included in the build for a given platform. This is useful for writing platform-specific code that won&amp;rsquo;t compile in another platform&amp;rsquo;s context, like when we want to use a specific node package/API in a an otherwise isomorphic file.&lt;/p></description></item><item><title>Desktop App (Tauri)</title><link>/docs/springboard/platforms/desktop-app-tauri/</link><pubDate>Thu, 07 Sep 2023 16:13:18 +0200</pubDate><guid>/docs/springboard/platforms/desktop-app-tauri/</guid><description>&lt;p>Springboard&amp;rsquo;s desktop app deployment uses &lt;a href="https://v2.tauri.app">Tauri&lt;/a> as the application shell, and can be deployed in 3 different ways:&lt;/p>
&lt;ul>
&lt;li>The desktop app hosts an http/websocket Hono server with the application for local devices to connect to and interact with (which is the primary use case of the Jam Tools framework). This is packaged as a &lt;a href="https://v2.tauri.app/learn/sidecar-nodejs">Node.js sidecar&lt;/a>. The plan is to use Deno instead for greater &lt;a href="https://docs.deno.com/runtime/fundamentals/security">security options&lt;/a> during building/packaging.&lt;/li>
&lt;li>The desktop app acts as a client and connect to a remote server. The desktop app can run its actions locally or remotely, allowing each feature in the application to pivot when needed. In order to allow for local functionality, the UI is bundled into the Tauri app, as opposed to rendering a page served up by the remote server. We use Tauri&amp;rsquo;s &lt;a href="https://v2.tauri.app/plugin/updater">updater&lt;/a> to keep the app updated with the version running on the remote server.&lt;/li>
&lt;li>The desktop app is an offline-only application that runs all of its actions in the Tauri webview.&lt;/li>
&lt;/ul>
&lt;p>To build the desktop app with CI, check out the workflows prefixed with &lt;code>desktop&lt;/code> here &lt;a href="https://github.com/jamtools/springboard/tree/main/.github/workflows">https://github.com/jamtools/springboard/tree/main/.github/workflows&lt;/a>. The workflow will scaffold a Tauri app during build time if one doesn&amp;rsquo;t exist, resulting in a zero-config desktop app building process &amp;#x1f680;&lt;/p></description></item></channel></rss>