<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Valink Solutions</title>
    <description>The latest articles on DEV Community by Valink Solutions (@valink).</description>
    <link>https://dev.to/valink</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F5464%2Fb60b9437-c3b1-4f3e-bba9-1fb396d10bb1.jpg</url>
      <title>DEV Community: Valink Solutions</title>
      <link>https://dev.to/valink</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/valink"/>
    <language>en</language>
    <item>
      <title>Embracing the Future: Valink Solutions' Vision for Community Healing and Technological Innovation</title>
      <dc:creator>Jake Evans</dc:creator>
      <pubDate>Sun, 19 Nov 2023 21:21:46 +0000</pubDate>
      <link>https://dev.to/valink/embracing-the-future-valink-solutions-vision-for-community-healing-and-technological-innovation-3o3d</link>
      <guid>https://dev.to/valink/embracing-the-future-valink-solutions-vision-for-community-healing-and-technological-innovation-3o3d</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Valink Solutions stands at the forefront of a technological revolution that intertwines with a profound social cause. Our core mission transcends mere technological advancements, focusing instead on healing indigenous communities through the synergistic blend of traditional wisdom and modern technology. We are committed to employing low-power ARM-based solutions and Rust's robust security features to drive this transformation. This document highlights our vision, strategy, and dedication to fostering meaningful change.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Commitment to Indigenous Communities
&lt;/h2&gt;

&lt;p&gt;Understanding the unique challenges of indigenous communities, Valink Solutions strives to harmoniously integrate advanced technology with time-honored traditions. Our ARM-based solutions respect the delicate environmental balance of these communities while providing functional, effective tools. This approach is not just about technological integration but a deep respect for and an effort to preserve indigenous wisdom and practices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rust: Our Technological Cornerstone
&lt;/h2&gt;

&lt;p&gt;Our passion for Rust stems from its unmatched safety and performance capabilities, making it ideal for developing reliable, secure applications, especially in power-constrained environments. We view Rust as more than a programming language; it's a means to empower communities, safeguard their data, and fortify their digital infrastructure against threats.&lt;/p&gt;

&lt;h2&gt;
  
  
  Expanding into Security and Training
&lt;/h2&gt;

&lt;p&gt;Recognizing the importance of digital security, we're broadening our services to include comprehensive security consulting and training. This initiative aims to protect digital assets and empower indigenous communities through cybersecurity education, fostering resilience and self-reliance against digital vulnerabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tailored IT Consulting Services
&lt;/h2&gt;

&lt;p&gt;Our IT consulting recognizes the uniqueness of each community. We reject the one-size-fits-all approach, choosing instead to develop customized IT strategies that align with specific community needs while respecting cultural values. This personalized approach ensures that technological solutions are both effective and culturally sensitive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vision for Sustainable Growth
&lt;/h2&gt;

&lt;p&gt;Our future plans focus on sustainable growth and deepened community engagement. We aim to collaborate closely with indigenous communities, understanding their needs, valuing their wisdom, and co-creating solutions for positive change. Our goal is for these communities to not only survive but thrive, supported by technology that honors their heritage and enhances their future prospects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Valink Solutions is more than a tech firm; we are a mission-driven team dedicated to bridging modern technology with indigenous heritage. Our journey is about partnership, innovation, and respect. We invite you to join us in this endeavor to create a future where technology is a conduit for healing, understanding, and empowerment.&lt;/p&gt;

</description>
      <category>rust</category>
      <category>consulting</category>
      <category>opensource</category>
      <category>startup</category>
    </item>
    <item>
      <title>Crafting Robust Minecraft Backup Tools: A Deep Dive into ChunkVault-Lite and Teller-CLI</title>
      <dc:creator>Jake Evans</dc:creator>
      <pubDate>Fri, 07 Apr 2023 18:57:33 +0000</pubDate>
      <link>https://dev.to/valink/crafting-robust-minecraft-backup-tools-a-deep-dive-into-chunkvault-lite-and-teller-cli-16d1</link>
      <guid>https://dev.to/valink/crafting-robust-minecraft-backup-tools-a-deep-dive-into-chunkvault-lite-and-teller-cli-16d1</guid>
      <description>&lt;h2&gt;
  
  
  Preamble
&lt;/h2&gt;

&lt;p&gt;Now I do not use the words “proof of concept” lightly here, every piece of code I wrote was to see If I could build an easy-to-deploy world backup tool that just works, I focused on real-world testing and developed primarily in a production environment (more on that in Why Deta Space and its Limitations) which led to some difficult decisions and some “over thought” solutions which in turn led me down the path of turning a few day projects into a couple of weeks of tinkering.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Introduction
&lt;/h2&gt;

&lt;p&gt;In Minecraft, community players invest countless hours building in and exploring virtual worlds. The unique creations and progress within these Minecraft worlds hold value to these players. The real world can be cruel sometimes, issues like data corruption, server issues, and device migration lead to the loss of precious memories. As someone who has lived this life and has seen it all from corrupted drives to lost USBs, I’ve dealt with my fair share of lost worlds that meant a lot to me, which led me to develop ChunkVault-Lite and Teller-CLI as proof of concept tools for a Minecraft world backup system.&lt;/p&gt;

&lt;p&gt;ChunkVault-Lite serves as a frontend and backend application running in Deta Space that allows users to view their worlds and their respective backups (snapshots). Teller-CLI is a command-line tool that facilitates uploading and downloading worlds, ensuring compatibility with the backend by chunking files before uploading and reassembling them after download. Together, these tools provide the user with a simple-to-use Minecraft world backup system.&lt;/p&gt;

&lt;p&gt;In this article, I will delve into the nitty-gritty of ChunkVault-Lite and Teller-CLI, explore the challenges imposed by Deta Space, and demonstrate how to set up and use these tools effectively.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Overview of the System Architecture
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1. ChunkVault-Lite
&lt;/h3&gt;

&lt;p&gt;ChunkVault-Lite is the web application that serves both the front end and back end of the backup system. The front end provides the user with a simple-to-use interface for viewing, editing, downloading, and deleting worlds, while the back end handles storage, retrieval, and serving of the world data. ChunkVault-Lite also provides a simple world-sharing system that provides the latest backup (snapshot) to the public via a share link.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2. Teller-CLI
&lt;/h3&gt;

&lt;p&gt;Teller-CLI is the command-line interface tool that was designed specifically to interface with ChunkVault-Lite. It enables users to upload their Minecraft worlds to be backed up and to download privately owned worlds or worlds shared through public urls from other users.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3. Interaction
&lt;/h3&gt;

&lt;p&gt;ChunkVault-Lite serves as the web application for managing backups (snapshots), while Teller-CLI is the command-line tool for uploading and downloading world backups (snapshots). Both are necessary to have a complete Minecraft World backup system.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The Application (Frontend &amp;amp; Backend)
&lt;/h2&gt;

&lt;p&gt;ChunkVault-Lite runs entirely in Deta Space using their micro (servers) and their Spacefiles to instruct how they are run together. The way Deta Space runs micro’s using a proxy allows the frontend to run under the regular domain and the backend to run under &lt;code&gt;/api&lt;/code&gt; allowing the frontend to make “local” fetch requests to the desired &lt;code&gt;/api&lt;/code&gt; route.&lt;/p&gt;

&lt;p&gt;Here is a stripped-down example of the Spacefile, showing how the frontend is set up to be primary micro and the backend is set to live under the path &lt;code&gt;api&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;v&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;app_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ChunkVault"&lt;/span&gt;
&lt;span class="na"&gt;micros&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;backend&lt;/span&gt;
    &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./backend&lt;/span&gt;
    &lt;span class="na"&gt;engine&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python3.9&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;api&lt;/span&gt;
    &lt;span class="na"&gt;public_routes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/public/*"&lt;/span&gt;
    &lt;span class="na"&gt;presets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;api_keys&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;frontend&lt;/span&gt;
    &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./frontend&lt;/span&gt;
    &lt;span class="na"&gt;engine&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;svelte-kit&lt;/span&gt;
    &lt;span class="na"&gt;primary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;public_routes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/public/*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/_app/immutable/*"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/fonts/*"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/vault-icon.png"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.1. Frontend
&lt;/h3&gt;

&lt;p&gt;The front end of ChunkVault-Lite is designed to be an easy-to-use interface for users to interface with their Minecraft worlds and backups. It was built using SvelteKit with DaisyUI along with a custom Neubrutalism styling.&lt;/p&gt;

&lt;h4&gt;
  
  
  Features
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;World overview: A list view of all uploaded Minecraft worlds, with thumbnails and world details, such as world name, difficulty, and seed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Backup management: Users can view the available backups (snapshots) for each world, with the option to download, or delete them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sharing option: The ability to generate a shareable link for specific worlds (this uses the most recent snapshot as a downloadable)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Simple editing: Users can change the info that shows up for other users when the world is accessed via the website (this does not change the contents of the actual world)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--w6ZK6pSf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rn8ngt33z61imlo0o9uk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w6ZK6pSf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rn8ngt33z61imlo0o9uk.png" alt="ChunkVault-Lite Frontend - Worlds Screen" width="800" height="985"&gt;&lt;/a&gt;&lt;br&gt;
Figure 1: A screenshot of the main world's screen for the ChunkVault-Lite Frontend showing the list view and world options.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UywiYHpV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/apms1axp6m9lquwuaebq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UywiYHpV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/apms1axp6m9lquwuaebq.png" alt="ChunkVault-Lite Frontend - Single World Screen" width="800" height="985"&gt;&lt;/a&gt;&lt;br&gt;
Figure 2: A screenshot of a single world screen for the ChunkVault-Lite Frontend showing the world info and options as well as the worlds backups (snapshots)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kk201Oq4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iuvpyhjr2ljf2aovz9bw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kk201Oq4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iuvpyhjr2ljf2aovz9bw.png" alt="ChunkVault-Lite Frontend - Single World Screen (Editing Modal)" width="800" height="985"&gt;&lt;/a&gt;&lt;br&gt;
Figure 3: A screenshot showing the edit window for a world in the ChunkVault-Lite front end.&lt;/p&gt;
&lt;h3&gt;
  
  
  3.2. Backend
&lt;/h3&gt;

&lt;p&gt;The backend of ChunkVault-Lite is responsible for handling storage, retrieval, and management of Minecraft worlds and their relevant backups. It was built using Python and FastAPI along with the Deta SDK.&lt;/p&gt;
&lt;h4&gt;
  
  
  Features
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;World storage: Securely store the uploaded Minecraft worlds and their respective backups in Deta Drive.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Backup management: Handling requests for backup creation, deletion, and editing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;World serving: Serving the worlds and backups for download either through the front end or via Teller-CLI.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;API: Providing a well-documented API for anyone to build their tools using it.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  4. The CLI Tool
&lt;/h2&gt;

&lt;p&gt;Teller-CLI is a command-line tool designed to complement ChunkVault-Lite by providing an efficient way to upload and download Minecraft worlds. It is built using Python with Typer and HTTPx and is compatible with various platforms, including Windows, macOS, and Linux.&lt;/p&gt;

&lt;p&gt;Key features and functionalities of Teller-CLI include:&lt;/p&gt;
&lt;h3&gt;
  
  
  4.1. Uploading Worlds
&lt;/h3&gt;

&lt;p&gt;Teller-CLI allows users to upload their Minecraft worlds to the ChunkVault-Lite backend by:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Pre-chunking the world files: To address Deta.space limitations, Teller-CLI splits the world files into smaller chunks before uploading. This process ensures the backend can handle the file sizes and minimizes the workload on the server.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Authenticating with the ChunkVault-Lite backend: Users must provide their API key to establish a secure and authorized connection with the backend.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Uploading the chunked world files: Teller-CLI uploads the chunks to the backend, where they are stored and managed by ChunkVault-Lite.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8RSuQ0km--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cklqvyuz0p2nyt7iinqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8RSuQ0km--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cklqvyuz0p2nyt7iinqu.png" alt="API Upload Process Flowchart" width="800" height="978"&gt;&lt;/a&gt;&lt;br&gt;
Figure 4: A flowchart showing the upload process for the API and how Teller-CLI communicates with the ChunkVault-Lite API&lt;/p&gt;
&lt;h3&gt;
  
  
  4.2. Downloading Worlds
&lt;/h3&gt;

&lt;p&gt;Teller-CLI enables users to download Minecraft worlds from their backend or a publicly shared URL provided by another user. The process involves:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Authenticating with the ChunkVault-Lite backend (if necessary): Users must provide their API key to access their worlds or enter the shared URL for public worlds.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Downloading the chunked world files: Teller-CLI retrieves the chunked world files from the backend.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reassembling the chunks: After downloading, Teller-CLI reassembles the chunks to recreate the original Minecraft world files.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jbbJxLSN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/luhsvli68dehzc612daj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jbbJxLSN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/luhsvli68dehzc612daj.png" alt="API Download Process Flowchart" width="800" height="1117"&gt;&lt;/a&gt;&lt;br&gt;
Figure 5: A flowchart showing the download process for the API and how Teller-CLI communicates with the ChunkVault-Lite API depending on if the world is owned by the user or if it is a shared URL. &lt;/p&gt;
&lt;h2&gt;
  
  
  5. Why Deta Space and its Limitations
&lt;/h2&gt;
&lt;h3&gt;
  
  
  5.1. How it Started
&lt;/h3&gt;

&lt;p&gt;When coming up with the idea of an easy-to-use Minecraft backup tool, I wanted something that everyone could use - something that was almost a one-button click and done. That’s where I landed on Deta Space.&lt;/p&gt;

&lt;p&gt;Deta has been valuable in the development world for several years, offering a convenient way for developers to set up free project hosting. The recent transition to Deta Space as a platform introduced numerous improvements to the way applications can be built. Among these enhancements were essential features, such as a built-in proxy, credential &amp;amp; token authentication, and easy app installations. These changes made Deta Space the ideal platform for building our concept backup system.&lt;/p&gt;
&lt;h3&gt;
  
  
  5.2. My Findings
&lt;/h3&gt;

&lt;p&gt;During my research, I found out the hard way that this migration from the old Deta platform to the Deta Space platform was not without its hiccups. While the Deta team has made significant efforts to improve the platform, some limitations have persisted, creating challenges for developers to overcome. However, these challenges were making it difficult to verify the information I had, as it was primarily based on the documentation of the old platform, which might have been similar but could also have undergone upgrades and breaking changes that are yet to be added to the new documentation which was still in early stages while creating the systems.&lt;/p&gt;
&lt;h3&gt;
  
  
  5.3. The Limitations
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Minecraft world size:&lt;/strong&gt; This was the biggest hurdle, which still plagues the Lite version and always will. In my testing, simple world generation of a couple of hundred blocks adds about 10MB, give or take, every time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;250MB of Memory:&lt;/strong&gt; The working application and all data have to fall under 250MB, or else the application will fail to run.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;10s TTL:&lt;/strong&gt; Every request has a 10s Time To Live, meaning complex tasks cannot exceed this limit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;10GB of Drive space:&lt;/strong&gt; The drive limit, at least from what I remember from the old platform, was 10GB per account, so I only take into account the full 10 GB.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;6MB File Size:&lt;/strong&gt; When receiving a file request or sending a file request, 6MB was the max size.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python &amp;lt;= 3.9:&lt;/strong&gt; Not a deal-breaker, but made me go back to my older ways of developing FastAPI backends.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No True Dev Environment:&lt;/strong&gt; Deta space had no dev environment for use during the creation of ChunkVault-Lite, recently &lt;code&gt;space dev&lt;/code&gt; was added to the space cli which made iteration much faster.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  5.4. Overcoming Deta Limitations
&lt;/h3&gt;

&lt;p&gt;The limitations posed significant challenges for a project with the primary objective of storing large compressed Minecraft world files.&lt;/p&gt;

&lt;p&gt;The 10s TTL and 6MB File Size, on the other hand, were bigger concerns. One, sending a file meant it had to be smaller than 6MB, and two, 10s means that if the world was significant in size, the backend would not be able to chunk a file itself. Thus, Teller-CLI was created to chunk and upload the compressed world file (see Figure 4), as well as download the chunks and reassemble them into a playable world (see Figure 5).&lt;/p&gt;

&lt;p&gt;The way the chunks are stored on the server is pretty straightforward; they follow this format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;snapshot_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;snapshot_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.part&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;part_number&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# l1qc7v4coo58/1680756146-snapshot.part1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each part corresponds to a chunk of a .zip file. Meaning any “client” that requests the file parts from the server, must rebuild the .zip file from the raw bytes responded by the server. Teller-CLI handles this for both public and private world backups, and ChunkVault-Lite’s frontend allows for downloading, because of the chunk system the download process is slow.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Installation and Setup
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ChunkVault-Lite
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Installation
&lt;/h4&gt;

&lt;p&gt;Installing ChunkVault-Lite is relatively simple, although setting it up for use with Teller-CLI can be a bit more challenging.&lt;/p&gt;

&lt;p&gt;You can find ChunkVault-Lite on the Deta Space Discovery Page by searching for “ChunkVault” or by &lt;a href="https://deta.space/discovery/@jakepixl/chunkvaultlite"&gt;Clicking Here&lt;/a&gt;. Once the application is installed on your Canvas, follow the steps illustrated in the screenshots below, with the button locations highlighted in red.&lt;/p&gt;

&lt;p&gt;Remember to save the generated API key for future access and store it securely:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nLIkDk7L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/delwxg14sziesawg5sjj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nLIkDk7L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/delwxg14sziesawg5sjj.png" alt="Deta Space Canvas - ChunkVault Item" width="800" height="985"&gt;&lt;/a&gt;&lt;br&gt;
Figure 6: A screenshot showing the freshly installed ChunkVault-Lite instance on the Deta Space Canvas, and where to click to proceed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XLDUBiRD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j7xz5m55diy8xkzcace9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XLDUBiRD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j7xz5m55diy8xkzcace9.png" alt="Deta Space Canvas - ChunkVault Settings Option" width="800" height="985"&gt;&lt;/a&gt;&lt;br&gt;
Figure 7: A screenshot showing to click the settings button on ChunkVault in the canvas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EARSy0Z4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4znv3k3l1fvxs6ztoxad.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EARSy0Z4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4znv3k3l1fvxs6ztoxad.png" alt="Deta Space Canvas - ChunkVault Keys Screen" width="800" height="985"&gt;&lt;/a&gt;&lt;br&gt;
Figure 8: A screenshot showing to click into the keys tab, then to click the “Create new API key” button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QDJyB_RY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3gqjqqhvjck4jo5na3na.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QDJyB_RY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3gqjqqhvjck4jo5na3na.png" alt="Deta Space Canvas - ChunkVault Generate API Key Screen" width="800" height="985"&gt;&lt;/a&gt;&lt;br&gt;
Figure 9: A screenshot showing the API generation screen, showing the creation of an API key called “teller-cli”.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jvN9MQdA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cwnnijt4wwkviteuqx2c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jvN9MQdA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cwnnijt4wwkviteuqx2c.png" alt="Deta Space Canvas - ChunkVault Keys Screen with Generate Key" width="800" height="985"&gt;&lt;/a&gt;&lt;br&gt;
Figure 10: A screenshot showing where it shows the API key after generation and which button to click to copy the code.&lt;/p&gt;
&lt;h3&gt;
  
  
  Teller-CLI
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Installation
&lt;/h4&gt;

&lt;p&gt;Installing Teller-CLI is straightforward, provided you have Python and pip installed. Simply enter the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;teller-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command enables the use of Teller-CLI in the terminal. When you first use Teller-CLI commands, you’ll be prompted to enter a base API URL, an API token for access through Deta’s authentication system (refer to Figures 6-10), and a default saves path for the Minecraft installation. The saves path must be the exact location of the saves folder within the main Minecraft folder. On Windows, this is usually &lt;code&gt;%appdata%/.minecraft&lt;/code&gt; saves, while on Mac/Linux, it’s typically &lt;code&gt;~/.minecraft/saves&lt;/code&gt;. These paths are default settings for their respective systems.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OukAUS_0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sgdd3lab937iq2m3dvb0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OukAUS_0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sgdd3lab937iq2m3dvb0.png" alt="Teller-CLI - Config Flow Screen" width="800" height="83"&gt;&lt;/a&gt;&lt;br&gt;
Figure 11:  A screenshot showing the flow for configuring Teller-CLI.&lt;/p&gt;
&lt;h2&gt;
  
  
  7. Usage
&lt;/h2&gt;

&lt;p&gt;Once ChunkVault-Lite is setup and Teller-CLI is configured to connect correctly to the backend using the API key, you are now able to upload and download worlds using the various commands, which you can become more acquainted with by using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;teller-cli &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hC2PCzoW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mrdsbn0elft79z4xj0k0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hC2PCzoW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mrdsbn0elft79z4xj0k0.png" alt="Teller-CLI - Help Screen" width="800" height="282"&gt;&lt;/a&gt;&lt;br&gt;
Figure 12: A screenshot showing the usage of &lt;code&gt;teller-cli --help&lt;/code&gt; and what is returned.&lt;/p&gt;
&lt;h3&gt;
  
  
  Uploading
&lt;/h3&gt;

&lt;p&gt;Uploading is simple as Teller-CLI will take either a folder name of a world or the absolute path of a world, compresses it, and uploads it to the ChunkVault-Lite backend.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;teller-cli upload &lt;span class="s2"&gt;"New World"&lt;/span&gt;
teller-cli upload &lt;span class="s2"&gt;"/absolute/path/to/New World"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fAoSJyZP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sot7i5rpntutknojuuno.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fAoSJyZP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sot7i5rpntutknojuuno.png" alt="Teller-CLI - Upload World Snapshot Screen" width="800" height="252"&gt;&lt;/a&gt;&lt;br&gt;
Figure 13: A screenshot showing the entire Teller-CLI upload process.&lt;/p&gt;
&lt;h3&gt;
  
  
  Downloading
&lt;/h3&gt;

&lt;p&gt;Downloading is simple it takes either a snapshot ID or an entire share URL to a publicly shared world, allows the user to replace the world if the replace option is passed (otherwise, it creates a copy), allows you to save the compressed version of the world if need be, permits saving the compressed version of the world if needed, and allows changing the save location if you don’t want it saved at the default location.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;teller-cli download l1qc7v4coo58 &lt;span class="nt"&gt;--replace&lt;/span&gt;
teller-cli download l1qc7v4coo58 &lt;span class="nt"&gt;--save&lt;/span&gt; &lt;span class="s2"&gt;"/Volumes/Backups/mc_saves"&lt;/span&gt;
teller-cli download &lt;span class="s2"&gt;"https://chunkvault-lite.jakepixl.dev/public/worlds/71C0S7E54DXAUYTRXJLDM"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6WgmIeoi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kwqmpp6w5swma6t9q4vd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6WgmIeoi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kwqmpp6w5swma6t9q4vd.png" alt="Teller-CLI - Download Owned Snapshot Screen" width="800" height="189"&gt;&lt;/a&gt;&lt;br&gt;
Figure 14: A screenshot showing the entire download process with an owned snapshot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mNKGetGY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hl2io8orrw2x4m1ctuz6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mNKGetGY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hl2io8orrw2x4m1ctuz6.png" alt="Teller-CLI - Download Shared World Screen" width="800" height="170"&gt;&lt;/a&gt;&lt;br&gt;
Figure 15: A screenshot showing the entire download process with a shared world URL.&lt;/p&gt;
&lt;h3&gt;
  
  
  Browsing
&lt;/h3&gt;

&lt;p&gt;Browsing allows you to list your worlds in your terminal and download a specific snapshot, it also allows for replacing worlds and changing the save path.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;teller-cli browse
teller-cli browse &lt;span class="nt"&gt;--replace&lt;/span&gt;
teller-cli browse &lt;span class="nt"&gt;--save&lt;/span&gt; &lt;span class="s2"&gt;"/Volumes/Backups/mc_saves"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Wj-yAcJK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w43gi6kz6pp7q5hqc7xx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Wj-yAcJK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w43gi6kz6pp7q5hqc7xx.png" alt="Teller-CLI - Browse Worlds Screen" width="800" height="583"&gt;&lt;/a&gt;&lt;br&gt;
Figure 16: A screenshot showing the browse worlds screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dIKobvLL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tf4jg0hdghpvinh5q587.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dIKobvLL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tf4jg0hdghpvinh5q587.png" alt="Teller-CLI - Browse World Snapshots Screen" width="800" height="582"&gt;&lt;/a&gt;&lt;br&gt;
Figure 17: A screenshot showing the browse world snapshots screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SzM4a5RD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8r2yyn4xsf4jl7jh2m65.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SzM4a5RD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8r2yyn4xsf4jl7jh2m65.png" alt="Teller-CLI - Browse Final Screen" width="800" height="192"&gt;&lt;/a&gt;&lt;br&gt;
Figure 18: A screenshot showing the final screen of the browse worlds command.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Future Improvements and Contributions
&lt;/h2&gt;

&lt;p&gt;The future of ChunkVault-Lite and Teller-CLI primarily revolves around essential fixes. As this was a proof of concept, the focus will remain on offering a straightforward method to back up Minecraft worlds, without much expansion. Instead, our attention will shift towards developing a more comprehensive, real-world solution with faster uploads/downloads, local and cloud storage options, enhanced clients, and more.&lt;/p&gt;

&lt;p&gt;Rust 🦀 will play a vital role in the future development of ChunkVault. You might wonder why ChunkVault-Lite and Teller-CLI weren’t initially built using Rust; the reason is the limited Rust support in Deta Space at the time of the project’s inception.&lt;/p&gt;

&lt;p&gt;ChunkVault-Lite is open-source, and we intend to maintain that openness for ChunkVault. This approach allows the Minecraft community to verify the safety of the application and encourages contributions from people with diverse backgrounds. Ultimately, we aim to make ChunkVault the premier solution for preserving your cherished Minecraft creations.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Conclusion
&lt;/h2&gt;

&lt;p&gt;In summary, ChunkVault-Lite and Teller-CLI create a simple yet effective system for backing up and managing Minecraft worlds. This proof of concept has worked to demonstrated the effectiveness/potential of a Minecraft backup tool. As the project transitions to Rust, Expect to see the performance increase significantly, more robust storage options, and overall improved user experiences.&lt;/p&gt;

&lt;p&gt;ChunkVault will remain open-source, ensuring the safety and security of our users, as well as fostering collaboration within the Minecraft developer community.&lt;/p&gt;

&lt;p&gt;Thank you for taking the time to read this write-up, and I hope you can join us on this journey.&lt;/p&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>learning</category>
      <category>svelte</category>
    </item>
  </channel>
</rss>
