<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://batect.dev/blog</id>
    <title>Batect Blog</title>
    <updated>2023-10-22T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://batect.dev/blog"/>
    <subtitle>Batect Blog</subtitle>
    <icon>https://batect.dev/img/favicon.svg</icon>
    <rights>Copyright © 2017-2023 Charles Korn.</rights>
    <entry>
        <title type="html"><![CDATA[Batect is no longer maintained]]></title>
        <id>https://batect.dev/blog/2023/10/22/batect-is-no-longer-maintained</id>
        <link href="https://batect.dev/blog/2023/10/22/batect-is-no-longer-maintained"/>
        <updated>2023-10-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[As of today, Batect is no longer maintained.]]></summary>
        <content type="html"><![CDATA[<p>As of today, Batect is no longer maintained.</p><p>Unfortunately, I no longer have the time to commit to maintaining Batect, and this situation is unlikely to change.</p><p>Any existing projects using Batect will continue to work.</p><p>Batect will no longer receive bug fixes, security fixes or new features, and I will not respond to issues, discussions, pull requests or emails related to Batect.</p><p>Thank you for all your support and enthusiasm for Batect over many years!</p>]]></content>
        <author>
            <name>Charles Korn</name>
            <uri>https://github.com/charleskorn</uri>
        </author>
        <category label="announcements" term="announcements"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[New: Batect wrapper validation action]]></title>
        <id>https://batect.dev/blog/2022/05/02/new-batect-wrapper-validation-github-action</id>
        <link href="https://batect.dev/blog/2022/05/02/new-batect-wrapper-validation-github-action"/>
        <updated>2022-05-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The 0.79.0 release added publication of checksums for the wrapper scripts.]]></summary>
        <content type="html"><![CDATA[<p>The <a href="https://github.com/batect/batect/releases/tag/0.79.0" target="_blank" rel="noopener noreferrer">0.79.0 release</a> added publication of checksums for the wrapper scripts.
These checksums make it easy to verify the integrity of the wrapper scripts used in your project.</p><p>Verifying the integrity of the wrapper scripts in your project is important, as they could be maliciously modified and these modifications
may not be immediately apparent.</p><p>To make verifying your project's wrapper scripts even easier, I'm pleased to announce the release of the new
<a href="https://github.com/batect/batect-wrapper-validation-action" target="_blank" rel="noopener noreferrer">batect-wrapper-validation-action action</a>,
which validates the integrity of the wrapper scripts as part of a GitHub Actions workflow.</p><p>The <a href="https://github.com/batect/batect-wrapper-validation-action" target="_blank" rel="noopener noreferrer">readme</a> has more details on how the action works and how to use it.
For most projects, it's as simple as adding the following job to an existing workflow:</p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">jobs</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">validate-batect-wrapper</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> Validate Batect wrapper scripts</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">runs-on</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> ubuntu</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#36acaa">20.04</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">steps</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> Check out code</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">uses</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> actions/checkout@v4.1.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> Validate Batect wrapper scripts</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">uses</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> batect/batect</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">wrapper</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">validation</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">action@v0.4.0</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can also use the action in an existing workflow or existing job.</p><div class="theme-admonition theme-admonition-warning alert alert--danger admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"></path></svg></span>danger</div><div class="admonitionContent_S0QG"><p>This action must run before any invocations of Batect.</p><p>If the action runs after an invocation of Batect and the wrapper script has been modified maliciously, the malicious version may be able to modify itself to appear genuine.</p></div></div>]]></content>
        <author>
            <name>Charles Korn</name>
            <uri>https://github.com/charleskorn</uri>
        </author>
        <category label="announcements" term="announcements"/>
        <category label="security" term="security"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Why is Batect written in Kotlin?]]></title>
        <id>https://batect.dev/blog/2022/02/07/why-is-batect-written-in-kotlin</id>
        <link href="https://batect.dev/blog/2022/02/07/why-is-batect-written-in-kotlin"/>
        <updated>2022-02-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This is a cross-post from my personal blog.]]></summary>
        <content type="html"><![CDATA[<div class="theme-admonition theme-admonition-note alert alert--secondary admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>Cross-post</div><div class="admonitionContent_S0QG"><p>This is a cross-post from <a href="https://charleskorn.com/2022/02/07/why-is-batect-written-in-kotlin/" target="_blank" rel="noopener noreferrer">my personal blog</a>.</p></div></div><p>A fairly frequent question I get is: why is <a href="https://batect.dev/" target="_blank" rel="noopener noreferrer">Batect</a> written in Kotlin? And often the question behind the question is:
why isn't it written in Golang?</p><p>To answer those questions we need to go back in time to 2017, when I first started working on Batect.</p><p>I had the idea for what would become Batect after working with a couple of different teams who were all trying
to use Dockerised development environments. And after going through the pain of trying to once again reinvent the same less-than-ideal setup
we'd had on a previous team, I decided to build a proof of concept for my idea.</p><p>At the time, all I wanted to do was quickly build a proof of concept. I was more concerned about building it quickly and having fun and learning
while I built it than anything else: I wasn't expecting the proof of concept to be anything more than some throwaway code. (Famous last words.)
I had been dabbling in Kotlin for a while and thought this would be a great opportunity to play with a language I really liked.</p><p>Fast forward a bit and we come to late 2017. I'd finished the proof of concept in Kotlin and demoed it to my team for feedback. They gave some really
positive feedback and that encouraged me to seriously consider turning Batect into something more than a proof of concept.</p><p>At this point, I had a codebase that could run a sample project, a working interface to Docker that invoked the <code>docker</code> command to pull images, create
containers etc., and some basic tests. I had two choices: continue with this largely working app, or throw it away and start afresh.</p><p>As part of considering whether or not to start afresh, I thought for a while about whether to continue in Kotlin or switch to Golang.
There were four things that were going through my mind:</p><p><strong>I had something that worked</strong> and a codebase that was in relatively good shape.</p><p>Switching to Golang would require starting from scratch. Given I was
doing this entirely on my own time, that didn't seem like a great use of time, especially for something that still didn't have any active users.</p><p>The main argument in favour of Golang was the fact that <strong>the vast majority of the Docker ecosystem is written in Golang</strong>.</p><p>If Batect was written in Golang, I could take advantage of things such as the Docker client library for Golang, rather than write my own for Kotlin.
I was using the <code>docker</code> CLI to communicate with the Docker daemon from Kotlin and changing to use <a href="https://docs.docker.com/engine/api/v1.41/" target="_blank" rel="noopener noreferrer">the HTTP API</a>
didn't seem <em>that</em> difficult if needed later.</p><p>Another argument in favour of Golang was <strong>the ability to build a single self-contained binary</strong> for distribution, rather than requiring users to install
a JVM.</p><p>However, <a href="https://blog.jetbrains.com/kotlin/2017/04/kotlinnative-tech-preview-kotlin-without-a-vm/" target="_blank" rel="noopener noreferrer">earlier that year</a>, JetBrains had
announced the first preview of Kotlin/Native, which would allow the same thing for Kotlin code. Younger, naïve-r me assumed that would be good enough
and easy enough to adopt in the future should the use of a JVM really turn out to be a problem.</p><p>The last thing was simply <strong>personal preference</strong> and how much I enjoyed working with the language.</p><p>Again, this was something I was doing on my own time and had no active users yet, so personal enjoyment was one of the main priorities for me.
At the time, I was working on a production Golang system and was finding the language somewhat lacking in comparison to Kotlin. Dependency management in
Golang was a pain (this would be fixed with the introduction of <a href="https://go.dev/doc/go1.11#modules" target="_blank" rel="noopener noreferrer">modules in Go 1.11</a> in August the next year), and I found
Kotlin's syntax and type system enabled me to write expressive, safe code.</p><p>So I chose to continue in Kotlin.</p><p>Looking back on that decision, there are definitely some things that remain true today, and others where the situation turned out to be
a bit different:</p><p><strong>Not rewriting Batect from scratch</strong> meant I was able to continue adding new features and incorporating feedback. This meant that Batect was ready to
introduce to a new team in late 2017. This team chose not only to take a risk and adopt a completely unproven tool, but continue to this day to be some
of its strongest advocates. If I'd stopped to rewrite Batect in Golang, I would have missed that opportunity.</p><p><strong>Using the <code>docker</code> CLI worked reasonably well for quite some time</strong>, but eventually the performance hit of spawning new processes to interact with the Docker
daemon was starting to have a noticeable impact.</p><p>Switching to use the API directly was, sadly, not as straightforward as I hoped. In particular, I had failed to consider the client-side complexities of some
of Docker's features, such as connection configuration management, image registry credentials and managing the terminal while streaming I/O to and from the daemon.</p><p>This has played out over and over again, and has been a significant drain on my time, especially when it came to adding support for BuildKit, which is largely
undocumented, requires extensive client-side logic to implement correctly and relies on
<a href="https://github.com/batect/batect/commit/98262d74c3e26b36b9d89eebb2838c48365e68d5" target="_blank" rel="noopener noreferrer">a number of Golang idiosyncrasies</a>.</p><p><strong>Kotlin/Native sadly hasn't matured as quickly as I expected.</strong> So Batect still requires a JVM, and this adds a small barrier to entry for some people. Having
said that, JetBrains is still actively developing Kotlin/Native and significant progress has been made in the last 12 months or so, so I remain hopeful that
removing the need for a JVM is still an achievable goal. This will not be painless -- Batect has dependencies on some JVM-only libraries at the moment --
but it certainly seems within reach.</p><p>The last point will always be a matter of personal opinion, but <strong>Kotlin remains my favourite language to this day.</strong></p><p>Every now and then I question my choice and whether it was the right decision to continue building Batect in Kotlin. While some things may well have been easier had
I chosen to use Golang, Batect has hundreds of active users who love using it, and I still enjoy working on it after all this time, and those are the two things that
matter most to me.</p><p><em>Thank you to Andy Marks, Inny So and Jo Piechota for providing feedback on a draft version of this post.</em></p>]]></content>
        <author>
            <name>Charles Korn</name>
            <uri>https://github.com/charleskorn</uri>
        </author>
        <category label="internals" term="internals"/>
        <category label="open source" term="open source"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[A big week for Batect: the Thoughtworks Tech Radar and 500 stars]]></title>
        <id>https://batect.dev/blog/2021/11/03/tech-radar-and-500-stars</id>
        <link href="https://batect.dev/blog/2021/11/03/tech-radar-and-500-stars"/>
        <updated>2021-11-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[It's been a big few days for Batect, with two significant milestones achieved:]]></summary>
        <content type="html"><![CDATA[<p>It's been a big few days for Batect, with two significant milestones achieved:</p><ul><li><p>Batect has once again been featured on <a href="https://www.thoughtworks.com/radar" target="_blank" rel="noopener noreferrer">the Thoughtworks Technology Radar</a>. It has
been placed in "trial", the ring one step from "adopt".</p></li><li><p>Batect's GitHub repository broke through 500 stars.</p></li></ul><p>I'd like to thank everyone who's helped get Batect to this point - whether you've simply tried "hello, world" with Batect, submitted some feedback
or advocated for its adoption on your teams, Batect exists for its users, and I'm incredibly grateful for all the support and encouragement
I've received from every one of you.</p><p>There's still much more to do, and many ways Batect could be further improved - watch this space!</p><p><em>Disclosure: while I am employed by Thoughtworks, I am not involved in the selection process for entries on the Radar, nor did
I nominate Batect for inclusion. I did provide a review of the entry description prior to its publication. See "how do we build the Radar?"
on <a href="https://www.thoughtworks.com/radar/faq-and-more" target="_blank" rel="noopener noreferrer">the frequently asked questions page</a> for more information on the process
behind the Technology Radar.</em></p>]]></content>
        <author>
            <name>Charles Korn</name>
            <uri>https://github.com/charleskorn</uri>
        </author>
        <category label="announcements" term="announcements"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Two new requests for comment: new expression syntax and bundle scoping]]></title>
        <id>https://batect.dev/blog/2021/08/29/two-new-rfcs</id>
        <link href="https://batect.dev/blog/2021/08/29/two-new-rfcs"/>
        <updated>2021-08-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[I've just published two RFCs covering significant enhancements to Batect:]]></summary>
        <content type="html"><![CDATA[<p>I've just published two RFCs covering significant enhancements to Batect:</p><ul><li><a href="https://github.com/batect/batect/pull/990" target="_blank" rel="noopener noreferrer">new expression syntax</a></li><li><a href="https://github.com/batect/batect/pull/991" target="_blank" rel="noopener noreferrer">bundle scoping</a></li></ul><p>The RFC process is intended to allow anyone with an interest in Batect to get involved and help shape it
to suit their needs, so please don't be shy! Any comments, suggestions, questions or constructive criticism
are more than welcome.</p>]]></content>
        <author>
            <name>Charles Korn</name>
            <uri>https://github.com/charleskorn</uri>
        </author>
        <category label="request-for-comment" term="request-for-comment"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Shell tab completion now available for Bash]]></title>
        <id>https://batect.dev/blog/2021/08/26/bash-shell-tab-completion</id>
        <link href="https://batect.dev/blog/2021/08/26/bash-shell-tab-completion"/>
        <updated>2021-08-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Batect now supports shell tab completion in Bash, in addition to the existing support for Fish and Zsh.]]></summary>
        <content type="html"><![CDATA[<p>Batect now supports shell tab completion in Bash, in addition to the <a href="/docs/getting-started/shell-tab-completion">existing support for Fish and Zsh</a>.</p><p>This supports both options (eg. <code>./batect --out</code><kbd>Tab</kbd> completes to <code>./batect --output</code>) and task names
(eg. <code>./batect b</code><kbd>Tab</kbd> completes to <code>./batect build</code>).</p><p>To get started, update your project to Batect 0.73.0, then follow
<a href="/docs/getting-started/shell-tab-completion#bash">the installation instructions</a>.</p>]]></content>
        <author>
            <name>Charles Korn</name>
            <uri>https://github.com/charleskorn</uri>
        </author>
        <category label="features" term="features"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Shameless plug: 'Applying lessons from open source to your own platform' talk]]></title>
        <id>https://batect.dev/blog/2021/05/19/by-thoughtworks-talk</id>
        <link href="https://batect.dev/blog/2021/05/19/by-thoughtworks-talk"/>
        <updated>2021-05-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[If you've ever wanted to hear the story of how Batect got to where it is today, and some of the lessons learnt along the way,]]></summary>
        <content type="html"><![CDATA[<p>If you've ever wanted to hear the story of how Batect got to where it is today, and some of the lessons learnt along the way,
here's your chance: I'm presenting a talk titled <a href="https://www.thoughtworks.com/by-thoughtworks/events" target="_blank" rel="noopener noreferrer"><em>Applying lessons from open source to your own platform</em></a>
on Tuesday, June 1 at 6pm (Melbourne time).</p><p>For those of you in Melbourne, you can attend in person, and it will also be live-streamed on Zoom for anyone to watch anywhere.</p><p>Registration is required at <a href="https://www.thoughtworks.com/by-thoughtworks/events" target="_blank" rel="noopener noreferrer">https://www.thoughtworks.com/by-thoughtworks/events</a>.</p>]]></content>
        <author>
            <name>Charles Korn</name>
            <uri>https://github.com/charleskorn</uri>
        </author>
        <category label="announcements" term="announcements"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[2021 user survey - win an AU$50 voucher!]]></title>
        <id>https://batect.dev/blog/2021/05/12/survey</id>
        <link href="https://batect.dev/blog/2021/05/12/survey"/>
        <updated>2021-05-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[I'm once again running a survey to collect feedback on Batect, and this year I'm offering an AU$50 voucher (or equivalent in your local currency) as a prize to encourage responses.]]></summary>
        <content type="html"><![CDATA[<p>I'm once again running a survey to collect feedback on Batect, and this year I'm offering an AU$50 voucher (or equivalent in your local currency) as a prize to encourage responses.</p><p>The survey is available at: <a href="https://forms.gle/1S7a7C7zfPzi39vN6" target="_blank" rel="noopener noreferrer">https://forms.gle/1S7a7C7zfPzi39vN6</a></p><p>If you're using Batect on your team at the moment, I would be super grateful if you could also share this within your team - the more responses I get, the better feedback I get,
and the better I can make Batect.</p>]]></content>
        <author>
            <name>Charles Korn</name>
            <uri>https://github.com/charleskorn</uri>
        </author>
        <category label="announcements" term="announcements"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Upcoming Bintray shutdown and how it affects you]]></title>
        <id>https://batect.dev/blog/2021/03/10/bintray-shutdown</id>
        <link href="https://batect.dev/blog/2021/03/10/bintray-shutdown"/>
        <updated>2021-03-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[tl;dr: run ./batect --upgrade to upgrade to Batect v0.69.0 or later to ensure Batect continues to work after May 1]]></summary>
        <content type="html"><![CDATA[<div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_S0QG"><p><strong>tl;dr</strong>: run <code>./batect --upgrade</code> to upgrade to Batect v0.69.0 or later to ensure Batect continues to work after May 1</p></div></div><p>Bintray <a href="https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/" target="_blank" rel="noopener noreferrer">announced on February 3</a> that it
will be shutting down on May 1, 2021.</p><p>Batect's wrapper script (<code>batect</code> on macOS and Linux, and <code>batect.cmd</code> on Windows) downloads Batect from Bintray if it has not
already been cached on your machine.</p><p>After Bintray's shutdown on May 1, downloading Batect from Bintray will no longer work. Batect v0.69.0 introduces a new download
server (<code>updates.batect.dev</code>) which does not rely on Bintray.</p><p>In order to continue using Batect without any issues after May 1, you must do one of the following:</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="option-1-upgrade-to-v0690-or-later">Option 1: upgrade to v0.69.0 or later<a href="#option-1-upgrade-to-v0690-or-later" class="hash-link" aria-label="Direct link to Option 1: upgrade to v0.69.0 or later" title="Direct link to Option 1: upgrade to v0.69.0 or later">​</a></h2><p>To switch to the new server, the easiest thing to do is to upgrade with <code>./batect --upgrade</code>. This will automatically update
your wrapper script to the new version that uses the new download server.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="option-2-remain-on-an-old-version-and-switch-to-new-server">Option 2: remain on an old version and switch to new server<a href="#option-2-remain-on-an-old-version-and-switch-to-new-server" class="hash-link" aria-label="Direct link to Option 2: remain on an old version and switch to new server" title="Direct link to Option 2: remain on an old version and switch to new server">​</a></h2><p>The new download server also supports old versions. If you need to remain on an older version, make the following changes
in your project's copy of the wrapper script:</p><div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_Ktv7">batect</div><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">DOWNLOAD_URL_ROOT=${BATECT_DOWNLOAD_URL_ROOT:-"https://dl.bintray.com/batect/batect"}</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">DOWNLOAD_URL=${BATECT_DOWNLOAD_URL:-"$DOWNLOAD_URL_ROOT/$VERSION/bin/batect-$VERSION.jar"}</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa">DOWNLOAD_URL_ROOT=${BATECT_DOWNLOAD_URL_ROOT:-"https://updates.batect.dev/v1/files"}</span><br></span><span class="token-line" style="color:#393A34"><span class="token inserted-sign inserted line" style="color:#36acaa"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa">DOWNLOAD_URL=${BATECT_DOWNLOAD_URL:-"$DOWNLOAD_URL_ROOT/$VERSION/batect-$VERSION.jar"}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_Ktv7">batect.cmd</div><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">$DownloadUrlRoot = getValueOrDefault $env:BATECT_DOWNLOAD_URL_ROOT "https://dl.bintray.com/batect/batect"^</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa">$DownloadUrlRoot = getValueOrDefault $env:BATECT_DOWNLOAD_URL_ROOT "https://updates.batect.dev/v1/files"^</span><br></span><span class="token-line" style="color:#393A34"><span class="token inserted-sign inserted line" style="color:#36acaa"></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token unchanged prefix unchanged"> </span><span class="token unchanged line">$UrlEncodedVersion = [Uri]::EscapeDataString($Version)^</span><br></span><span class="token-line" style="color:#393A34"><span class="token unchanged line"></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token deleted-sign deleted prefix deleted" style="color:#d73a49">-</span><span class="token deleted-sign deleted line" style="color:#d73a49">$DownloadUrl = getValueOrDefault $env:BATECT_DOWNLOAD_URL "$DownloadUrlRoot/$UrlEncodedVersion/bin/batect-$UrlEncodedVersion.jar"^</span><br></span><span class="token-line" style="color:#393A34"><span class="token deleted-sign deleted line" style="color:#d73a49"></span><span class="token inserted-sign inserted prefix inserted" style="color:#36acaa">+</span><span class="token inserted-sign inserted line" style="color:#36acaa">$DownloadUrl = getValueOrDefault $env:BATECT_DOWNLOAD_URL "$DownloadUrlRoot/$UrlEncodedVersion/batect-$UrlEncodedVersion.jar"^</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>]]></content>
        <author>
            <name>Charles Korn</name>
            <uri>https://github.com/charleskorn</uri>
        </author>
        <category label="announcements" term="announcements"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Shell tab completion now available for Zsh and Fish]]></title>
        <id>https://batect.dev/blog/2021/03/01/shell-tab-completion</id>
        <link href="https://batect.dev/blog/2021/03/01/shell-tab-completion"/>
        <updated>2021-03-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Batect now supports shell tab completion in both Zsh and Fish.]]></summary>
        <content type="html"><![CDATA[<p>Batect now supports shell tab completion in both <a href="https://www.zsh.org/" target="_blank" rel="noopener noreferrer">Zsh</a> and <a href="https://fishshell.com/" target="_blank" rel="noopener noreferrer">Fish</a>.</p><p>This supports both options (eg. <code>./batect --out</code><kbd>Tab</kbd> completes to <code>./batect --output</code>) and task names
(eg. <code>./batect b</code><kbd>Tab</kbd> completes to <code>./batect build</code>):</p><div class="loading_Nai4">Loading...</div><p>To get started, update your project to Batect 0.68.0, then follow
<a href="/docs/getting-started/shell-tab-completion">the installation instructions for your shell</a>.</p>]]></content>
        <author>
            <name>Charles Korn</name>
            <uri>https://github.com/charleskorn</uri>
        </author>
        <category label="features" term="features"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Keep Batect and your configuration up-to-date automatically with Renovate]]></title>
        <id>https://batect.dev/blog/2020/12/20/renovate-support</id>
        <link href="https://batect.dev/blog/2020/12/20/renovate-support"/>
        <updated>2020-12-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[_tl;dr: Renovate now supports Batect, which means it can automatically send you PRs to update Batect itself as well]]></summary>
        <content type="html"><![CDATA[<p><em>tl;dr: <a href="https://renovatebot.com/" target="_blank" rel="noopener noreferrer">Renovate</a> now supports Batect, which means it can automatically send you PRs to update Batect itself as well
as any images or bundles you reference in your configuration files.</em></p><p>Keeping dependencies and tools up-to-date is a necessary but tedious task for any codebase. Tools like <a href="https://dependabot.com/" target="_blank" rel="noopener noreferrer">Dependabot</a>
and <a href="https://renovatebot.com" target="_blank" rel="noopener noreferrer">Renovate</a> help to automate this process by scanning your repository for dependencies, identifying which ones are out of date
and then sending you PRs to update them.</p><p>I'm pleased to announce that Renovate has accepted a series of PRs that add support for Batect to Renovate. These cover all three scenarios required
to keep Batect and your configuration up-to-date:</p><ul><li>updating Batect itself (equivalent to running <code>./batect --upgrade</code>)</li><li>updating any Docker <a href="/docs/reference/config/containers#image">image references</a> in your configuration files</li><li>updating any <a href="/docs/reference/config/includes#git-includes">bundle references</a> in your configuration files</li></ul><p>If you use Dockerfiles to build images for use with Batect, Renovate already has you covered as well - updating base image references in Dockerfiles has been
supported by Renovate for a while.</p><p>No configuration is required to activate this. If you're already using Renovate's hosted service, you'll start receiving update PRs automatically.
If you host Renovate yourself, update to <a href="https://github.com/renovatebot/renovate/releases/tag/24.2.0" target="_blank" rel="noopener noreferrer">24.2.0</a> or later.</p><p>By default, Renovate will only update image or bundle references in files named <code>batect.yml</code> or <code>batect-bundle.yml</code>. <del>If you use
<a href="/docs/reference/config/includes#file-includes">file includes</a> to split your configuration over multiple files, you'll need to configure which files
to search with <code>fileMatch</code> in your <code>renovate.json</code>.</del>
<strong>Update 22/12</strong>: if your configuration is split over multiple files with file includes, no further configuration is required - Renovate will
now automatically detect image and bundle references in files included in your main configuration file.</p><p>Take a look at <a href="/docs/using-batect-with/tools/renovate">the documentation</a> for more information.</p>]]></content>
        <author>
            <name>Charles Korn</name>
            <uri>https://github.com/charleskorn</uri>
        </author>
        <category label="features" term="features"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[New site, new docs, new logo and a capital letter]]></title>
        <id>https://batect.dev/blog/2020/12/06/welcome</id>
        <link href="https://batect.dev/blog/2020/12/06/welcome"/>
        <updated>2020-12-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Welcome to the (long-overdue) refreshed batect.dev. This site has been reimagined from the ground up to]]></summary>
        <content type="html"><![CDATA[<p>Welcome to the (long-overdue) refreshed <a href="https://batect.dev" target="_blank" rel="noopener noreferrer">batect.dev</a>. This site has been reimagined from the ground up to
better serve you. Some of the most exciting changes include:</p><ul><li><a href="#a-logo-for-batect-and-a-capital-letter">A logo for Batect (and a capital letter)</a></li><li><a href="#improved-readability">Improved readability</a></li><li><a href="#reorganised-documentation-structure">Reorganised documentation structure</a></li><li><a href="#improved-search">Improved search</a></li><li><a href="#improved-hosting">Improved hosting</a></li><li><a href="#elevation-of-bundles-to-the-top-level-navigation">Elevation of bundles to the top-level navigation</a></li><li><a href="#a-blog">A blog</a></li><li><a href="#a-proper-home-page">A proper home page</a></li></ul><p>As always, I'm keen to hear your feedback on these changes. Please <a href="https://github.com/batect/batect/issues" target="_blank" rel="noopener noreferrer">open an issue</a> or
<a href="https://spectrum.chat/batect" target="_blank" rel="noopener noreferrer">post on Spectrum</a> if you have any suggestions or encounter any problems.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="a-logo-for-batect-and-a-capital-letter">A logo for Batect (and a capital letter)<a href="#a-logo-for-batect-and-a-capital-letter" class="hash-link" aria-label="Direct link to A logo for Batect (and a capital letter)" title="Direct link to A logo for Batect (and a capital letter)">​</a></h2><p>Batect now has a shiny new logo:</p><svg xmlns="http://www.w3.org/2000/svg" width="281.523" height="79" viewBox="0 0 74.486 20.902" style="margin:1rem auto;display:block"><defs><path id="a" d="M34.018 50.649h98.498v50.553H34.018z"></path></defs><path d="M4.233 0h3.97v3.969h-3.97zm0 4.233h3.97v3.97h-3.97zm0 4.234h3.97v3.968h-3.97zm0 4.233h3.97v3.969h-3.97zm0 4.233h3.97v3.97h-3.97zm4.234-8.466h3.968v3.968H8.467zm0 8.466h3.968v3.97H8.467zM8.467 0h3.968v3.969H8.467zM12.7 4.233h3.969v3.97H12.7zm0 8.467h3.969v3.969H12.7zm0-4.233h1.852v1.852H12.7zm0 2.116h1.852v1.852H12.7zm0 6.35h1.852v1.852H12.7zm0-14.816h1.852v1.852H12.7zm0-1.059h.794v.794H12.7zm2.117 2.117h.793v.794h-.793zm0 5.292h.793v.793h-.793zm0 3.175h.793v.793h-.793zm0 5.291h.793v.794h-.793zM12.7 19.05h.794v.794H12.7zM0 0h3.969v3.969H0zm0 16.933h3.969v3.97H0z" fill="#89b400"></path><g style="line-height:1.25;-inkscape-font-specification:'Zilla Slab, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;white-space:pre;shape-inside:url(#a)" font-weight="400" font-size="32.279" font-family="Zilla Slab"><path d="M52.223 74.148q0 2.485-1.775 4.228-1.776 1.711-5.262 1.711h-9.813v-2.066h2.647v-16.85h-2.647v-2.065h9.652q3.195 0 4.745 1.388 1.582 1.388 1.582 3.647 0 1.679-1.001 2.938-1 1.258-2.615 1.581v.13q2.292.354 3.39 1.872 1.097 1.484 1.097 3.486zm-3.39-9.458q0-1.97-1.129-2.744-1.098-.775-3.067-.775h-4.26v7.102h4.164q1.872 0 3.066-.904 1.227-.936 1.227-2.68zm.872 9.329q0-1.776-1.065-2.776-1.033-1.033-3.099-1.033h-5.164v7.811h4.39q2.26 0 3.583-.936 1.355-.968 1.355-3.066zm6.408-7.199q1.13-.742 2.389-1.065 1.259-.323 2.679-.323 5.132 0 5.132 4.81v6.843q0 1.55 1.227 1.55.549 0 .968-.194l.033 1.485q-.872.484-1.873.484-2.55 0-2.614-2.905v-.065q-.678 1.162-1.937 2.066-1.226.904-2.97.904-1.42 0-2.905-.872-1.452-.871-1.452-3.163 0-2.711 2.13-3.55 2.163-.872 4.584-.872.645 0 1.291.032.678.032 1.259.097V70.79q0-1.55-.678-2.518-.646-.968-2.582-.968-1.582 0-2.776.58l-.55 2.486-1.871-.226zm7.94 7.876V73.6q-.612-.032-1.29-.097-.678-.064-1.388-.064-1.614 0-2.938.516-1.29.484-1.29 2.163 0 1.388.87 1.904.872.517 1.808.517 1.485 0 2.776-1.033 1.324-1.033 1.453-2.809zm16.832 1.518q-.581 4.196-4.551 4.196-2.163 0-3.325-1.227-1.13-1.226-1.13-3.325V67.53h-2.324v-1.807h2.324v-4.616h2.26v4.616h5.616v1.807H74.14v8.038q0 1.291.548 2.098.581.775 1.873.775.839 0 1.549-.517.742-.516 1.065-2.26zm14.205-.259q-.29 1.84-1.84 3.164-1.548 1.29-4.195 1.29-3.035 0-4.907-1.904-1.872-1.904-1.872-5.39 0-3.357 1.775-5.52 1.776-2.163 4.81-2.163 2.97 0 4.519 1.873 1.55 1.872 1.582 4.422 0 .839-.194 1.71H84.665q.193 5.036 4.551 5.036 1.71 0 2.68-.807.968-.807 1.29-2.13zm-2.517-4.196q.161-1.614-.775-3.034-.903-1.42-3.002-1.42-2 0-2.937 1.323-.936 1.323-1.162 3.131zm17.486 3.486q-.29 1.872-1.711 3.519-1.388 1.646-4.358 1.646-2.97 0-4.745-1.905-1.775-1.936-1.775-5.39 0-2.97 1.678-5.326 1.679-2.357 5.036-2.357 1.42 0 2.615.323 1.194.323 2.291 1.162l.55 3.454-1.873.226-.549-2.421q-1.29-.807-3.066-.807-2.292 0-3.293 1.646-1 1.647-1 3.97 0 2.583 1.13 4.036 1.13 1.452 3.26 1.452 3.227 0 3.873-3.647zm12.941.969q-.582 4.196-4.552 4.196-2.163 0-3.325-1.227-1.13-1.226-1.13-3.325V67.53h-2.324v-1.807h2.324v-4.616h2.26v4.616h5.616v1.807h-5.616v8.038q0 1.291.549 2.098.58.775 1.872.775.84 0 1.55-.517.742-.516 1.064-2.26z" style="-inkscape-font-specification:'Zilla Slab, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal" aria-label="Batect" transform="translate(1.163 -31.001) scale(.59612)"></path></g></svg><p>Much like Batect itself, I've tried to keep it simple. (You'll be pleased to hear I discarded ideas including a dolphin juggling containers
on a unicycle and a rocket with a bunch of containers strapped to the side.)</p><p>Oh, and you'll notice that I've embraced the capital letter: the 'official' spelling is now Batect, not batect. The lowercase letter
always felt awkward, and others writing about Batect seemed to use the lowercase spelling only around 50% of the time. So, rather than try to fight
it, I've embraced it. Batect's all grown up now.</p><p>The new logo and capitalisation should be updated in most places now. If you notice any lowercase instances of 'Batect', please
<a href="https://github.com/batect/batect/issues" target="_blank" rel="noopener noreferrer">open an issue</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="improved-readability">Improved readability<a href="#improved-readability" class="hash-link" aria-label="Direct link to Improved readability" title="Direct link to Improved readability">​</a></h2><p>Given that documentation is largely words, getting the display of words right has been a priority for me. This entire site is now built with
<a href="https://docusaurus.io/" target="_blank" rel="noopener noreferrer">Docusaurus</a>, which uses <a href="https://facebookincubator.github.io/infima/" target="_blank" rel="noopener noreferrer">Infima</a> for its default styling. Infima is
designed for content-heavy sites such as documentation, and provides a set of sensible defaults that offer good readability.</p><p>On top of Infima, I've selected some great open source fonts that help differentiate between body and heading text, making it easier to scan through
longer pages.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="reorganised-documentation-structure">Reorganised documentation structure<a href="#reorganised-documentation-structure" class="hash-link" aria-label="Direct link to Reorganised documentation structure" title="Direct link to Reorganised documentation structure">​</a></h2><p>The documentation has been reorganised to better address the needs of different groups of users:</p><ul><li>"I'm new here, show me what Batect is and why I care": quick <a href="/docs/getting-started/hello-world">hello world example</a> and <a href="/docs/getting-started/sample-projects">sample projects</a></li><li>"Help me get up and running with Batect": deeper <a href="/docs/getting-started/tutorial">getting started tutorial</a> and <a href="/docs/getting-started/installation">installation instructions</a>, as well as conceptual explanations</li><li>"What's the name of the configuration option to do X?": <a href="/docs/reference/config">configuration file</a> and <a href="/docs/reference/cli">CLI reference</a>, as well as a <a href="/docs/reference/cheat-sheet">cheat sheet</a></li><li>"I'm trying to use Batect with Y, what's the best way to set that up?": guides for using Batect with different tools and ecosystems</li><li>"I've got a problem": specific how-to guides for common issues and how to solve them</li></ul><p>On top of this reorganisation, each page has been reviewed, updated and clarified, and diagrams have been added in places to aid explanations.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="improved-search">Improved search<a href="#improved-search" class="hash-link" aria-label="Direct link to Improved search" title="Direct link to Improved search">​</a></h2><p>The old documentation site had very basic search that didn't always find the most relevant results. For example, it struggled with synonyms.
The new site uses <a href="https://docsearch.algolia.com/" target="_blank" rel="noopener noreferrer">Algolia DocSearch</a> to provide relevant results, quickly. And it's keyboard friendly as well:
just press <kbd>Command</kbd>+<kbd>K</kbd> (macOS) or <kbd>Control</kbd>+<kbd>K</kbd> (Windows and Linux) to open the search dialog.</p><p><em>(The search index may take 24 hours to pick up the new site - if search seems a bit wacky on December 7 or 8, this will be why.)</em></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="improved-hosting">Improved hosting<a href="#improved-hosting" class="hash-link" aria-label="Direct link to Improved hosting" title="Direct link to Improved hosting">​</a></h2><p>The documentation is now hosted on <a href="https://www.netlify.com/" target="_blank" rel="noopener noreferrer">Netlify</a>, which brings a bunch of cool features. The most exciting one is
support for server-side redirects. Previously, I was hesitant to change URLs for fear of breaking links, but this meant that the
documentation wasn't always organised in the most logical way. I'll now be able to more easily shift content around as Batect continues to evolve.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="elevation-of-bundles-to-the-top-level-navigation">Elevation of bundles to the top-level navigation<a href="#elevation-of-bundles-to-the-top-level-navigation" class="hash-link" aria-label="Direct link to Elevation of bundles to the top-level navigation" title="Direct link to Elevation of bundles to the top-level navigation">​</a></h2><p>The old bundles page was shoehorned into the old documentation because there wasn't really any other place to put it, but this hid them. They're
now highlighted in the top-level navigation at the top of the page, and the layout of the page has been much improved as well.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="a-blog">A blog<a href="#a-blog" class="hash-link" aria-label="Direct link to A blog" title="Direct link to A blog">​</a></h2><p>While documentation is great for more formal communication of information, there wasn't a great way to highlight new features, publish less formal
tutorials or ideas and make announcements. I'm looking forward to being able to use this blog for all of those things and more.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="a-proper-home-page">A proper home page<a href="#a-proper-home-page" class="hash-link" aria-label="Direct link to A proper home page" title="Direct link to A proper home page">​</a></h2><p>Batect is no longer just a small project used by a single team - it now has hundreds of users all around the globe. These users (you!) recommend Batect
to their friends and colleagues, but the old home page that greeted them was a huge wall of text that didn't do a great job of highlighting Batect's
best features to those who haven't used it. The new home page is much simpler and gets to the point.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="in-closing">In closing<a href="#in-closing" class="hash-link" aria-label="Direct link to In closing" title="Direct link to In closing">​</a></h2><p>I'm always working to make Batect easier to use and great documentation is a key part of that. If you run into any issues with the new site
or have any recommendations on how to improve it, please don't hesitate to let me know.</p>]]></content>
        <author>
            <name>Charles Korn</name>
            <uri>https://github.com/charleskorn</uri>
        </author>
        <category label="website" term="website"/>
        <category label="docs" term="docs"/>
    </entry>
</feed>