<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://pacos.dev/blog</id>
    <title>PacOS Blog</title>
    <updated>2026-10-12T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://pacos.dev/blog"/>
    <subtitle>PacOS Blog</subtitle>
    <icon>https://pacos.dev/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Understanding Variables in PacOS]]></title>
        <id>https://pacos.dev/blog/understanding-variables-in-pacos</id>
        <link href="https://pacos.dev/blog/understanding-variables-in-pacos"/>
        <updated>2026-10-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Learn how system, plugin and user variables work in PacOS, how scopes override one another, and how to use variables in supported fields.]]></summary>
        <content type="html"><![CDATA[<p>PacOS variables let you reuse values across fields and change configuration without editing every place where a value is used. They can represent fixed values, values generated by JavaScript, or settings that change with the active variable collection.</p>
<p>Variables are available in fields that support them. These fields are marked with a variables icon, and variables are written inside double curly braces, for example <code>{{base_url}}</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="insert-a-variable-into-a-field">Insert a variable into a field<a href="https://pacos.dev/blog/understanding-variables-in-pacos#insert-a-variable-into-a-field" class="hash-link" aria-label="Direct link to Insert a variable into a field" title="Direct link to Insert a variable into a field" translate="no">​</a></h2>
<p>In a field that supports variables, type <code>{{</code> or press <strong>Ctrl+Space</strong> to open variable suggestions. The picker shows available variables and their current values.</p>
<p>A variable that does not exist is shown in red. If a variable's value is overridden by a higher-priority scope, the lower-priority value is shown as crossed out. This helps explain which value PacOS will use.</p>
<p>Variables can be used in any field that supports them, not only in the Mock Server plugin.
<img decoding="async" loading="lazy" alt="variable-field.jpg" src="https://pacos.dev/assets/images/variable-field-f76e297d504d033d7f6e511314418d41.jpg" width="384" height="156" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="variable-scopes">Variable scopes<a href="https://pacos.dev/blog/understanding-variables-in-pacos#variable-scopes" class="hash-link" aria-label="Direct link to Variable scopes" title="Direct link to Variable scopes" translate="no">​</a></h2>
<p>PacOS has several variable scopes. They differ in where a variable is available and whether another scope can override it.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-system-variables">1. System variables<a href="https://pacos.dev/blog/understanding-variables-in-pacos#1-system-variables" class="hash-link" aria-label="Direct link to 1. System variables" title="Direct link to 1. System variables" translate="no">​</a></h3>
<p>System variables are configured in <strong>Application → Settings → System → Variables</strong>. Their names always start with a dollar sign, such as <code>$current_date</code> or <code>$random_name</code>.</p>
<p>System variables use a JavaScript engine. A variable can return a fixed value or calculate one when evaluated. For example, a date variable can return the current date, while another variable can generate a random name or year.</p>
<p>System variables have global availability, but they are the lowest-priority scope: a variable with the same name from a higher-priority scope can override its value.</p>
<p><img decoding="async" loading="lazy" alt="variable-setting.jpg" src="https://pacos.dev/assets/images/variable-setting-6ab35d9e231014929fdbec0490a182c0.jpg" width="899" height="499" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-plugin-variables">2. Plugin variables<a href="https://pacos.dev/blog/understanding-variables-in-pacos#2-plugin-variables" class="hash-link" aria-label="Direct link to 2. Plugin variables" title="Direct link to 2. Plugin variables" translate="no">​</a></h3>
<p>Plugins can define their own variables for use within the plugin. Their scope is limited to that plugin.</p>
<p>For example, Mock Server supports variables associated with a collection of mocks. These variables are available within the selected collection and can provide values used by its mock scripts.
<img decoding="async" loading="lazy" alt="variable-plugin.jpg" src="https://pacos.dev/assets/images/variable-plugin-e0148b6415285b3e5d9005cd1b63ef0f.jpg" width="872" height="207" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-user-variables-global-and-collection-variables">3. User variables: Global and collection variables<a href="https://pacos.dev/blog/understanding-variables-in-pacos#3-user-variables-global-and-collection-variables" class="hash-link" aria-label="Direct link to 3. User variables: Global and collection variables" title="Direct link to 3. User variables: Global and collection variables" translate="no">​</a></h3>
<p>User variables are managed in the <strong>Variables</strong> module. They are divided into two groups: <strong>Global</strong> and named collections.</p>
<p><strong>Global variables</strong> are available continuously. They are useful for values that usually stay the same while you work, such as a service URL or a user-specific setting. Global user variables override plugin variables and system variables with the same name.</p>
<p><strong>Collection variables</strong> belong to a named user collection. Only one user collection can be active at a time. Switching the active collection reloads its variables throughout the system.</p>
<p>For example, one collection might define <code>myVariable</code> as <code>one</code>, while another defines the same variable as <code>notMyVariable</code>. Switching collections changes the value supplied by that collection without requiring you to edit every field that references it.</p>
<p>Collection variables override plugin variables and system variables with the same name. Global user variables have higher priority than collection variables.</p>
<p><img decoding="async" loading="lazy" alt="variable-system.jpg" src="https://pacos.dev/assets/images/variable-system-982a00b4892a149208e1dc105e34fc83.jpg" width="553" height="498" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="which-value-wins-when-names-overlap">Which value wins when names overlap?<a href="https://pacos.dev/blog/understanding-variables-in-pacos#which-value-wins-when-names-overlap" class="hash-link" aria-label="Direct link to Which value wins when names overlap?" title="Direct link to Which value wins when names overlap?" translate="no">​</a></h2>
<p>When variables with the same name exist in multiple scopes, PacOS resolves them by priority. From lowest to highest, the order is:</p>
<ol>
<li class=""><strong>System variables</strong></li>
<li class=""><strong>Plugin variables</strong>, such as variables belonging to a Mock Server collection</li>
<li class=""><strong>User collection variables</strong> from the active user collection</li>
<li class=""><strong>Global user variables</strong></li>
</ol>
<p>The highest-priority enabled variable with a matching name supplies the effective value. For example, if a system variable and a user collection both define <code>base_url</code>, the collection value takes precedence. If a global user variable also defines <code>base_url</code>, the global user value takes precedence over both.</p>
<p><img decoding="async" loading="lazy" alt="variable-override.jpg" src="https://pacos.dev/assets/images/variable-override-8f5370ce8383969fcdb79c41663adec7.jpg" width="309" height="130" class="img_ev3q"></p>
<p>You can temporarily disable individual global or collection variables. Disabled variables are not offered as available variables in the variable suggestion window.</p>
<p>The Variables module includes a help window that can be used to inspect how the resolution and override rules work.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="switch-collections-or-override-values-while-working">Switch collections or override values while working<a href="https://pacos.dev/blog/understanding-variables-in-pacos#switch-collections-or-override-values-while-working" class="hash-link" aria-label="Direct link to Switch collections or override values while working" title="Direct link to Switch collections or override values while working" translate="no">​</a></h2>
<p>You do not need to open the Variables module every time you want to change the active context. PacOS provides quick access from the application bar and icon <code>{v}</code> to switch the active collection or temporarily override a variable's current value.</p>
<p><img decoding="async" loading="lazy" alt="variable-active.jpg" src="https://pacos.dev/assets/images/variable-active-208a871e858cee123b440a011b5c2e5d.jpg" width="561" height="84" class="img_ev3q"></p>
<p>The variable plugin's help explains that the active collection is reloaded throughout the system and that global variables with the same name are overridden by variables from the active collection. For variables that can also be overridden by higher-priority scopes, the suggestion window helps you see the effective value and which values are shadowed.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="copy-paste-and-share-variables-as-json">Copy, paste and share variables as JSON<a href="https://pacos.dev/blog/understanding-variables-in-pacos#copy-paste-and-share-variables-as-json" class="hash-link" aria-label="Direct link to Copy, paste and share variables as JSON" title="Direct link to Copy, paste and share variables as JSON" translate="no">​</a></h2>
<p>The Variables editor supports copying and pasting variable data in JSON format. It detects the format and imports or exports variables through the clipboard.
<img decoding="async" loading="lazy" alt="variable-module.jpg" src="https://pacos.dev/assets/images/variable-module-4a3ad7d7ae59ad5a62cd881f71d37382.jpg" width="801" height="411" class="img_ev3q">
When you paste JSON into the Variables window, the entries are added to the collection currently being edited. This makes it practical to share values for a test scenario: one team member can send the JSON to another, who can paste it into the appropriate collection. Anyone who imports the same values can activate that collection to change the behaviour of extensions that use those variables.</p>
<p>For example, this JSON defines two variables:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><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 property" style="color:#36acaa">"exampleVariable"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"current example value"</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 property" style="color:#36acaa">"exampleNumber"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"15"</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><br></span></code></pre></div></div>
<p>Paste the JSON into the Variables editor while editing the collection that should contain these values. The variables become available according to the normal scope and override rules. In this example, both values are strings, including <code>"15"</code>.</p>
<p>Check the contents before importing shared JSON, especially if it contains sensitive values.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="use-variable-collections-to-switch-test-scenarios">Use variable collections to switch test scenarios<a href="https://pacos.dev/blog/understanding-variables-in-pacos#use-variable-collections-to-switch-test-scenarios" class="hash-link" aria-label="Direct link to Use variable collections to switch test scenarios" title="Direct link to Use variable collections to switch test scenarios" translate="no">​</a></h2>
<p>Variable collections can be more than a convenient place to store related values. When a plugin uses variables in its fields or scripts, a collection can supply the data for a particular test scenario. Switching the active collection then changes those inputs without requiring you to edit every mock or request.</p>
<p>For example, a Mock Server script can use a variable for the response body. One collection could provide a successful response, while another provides an error response:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><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 property" style="color:#36acaa">"responseBody"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"{\"status\":\"ok\",\"items\":[]}"</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><br></span></code></pre></div></div>
<p>An error-scenario collection could use the same variable name with a different value:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><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 property" style="color:#36acaa">"responseBody"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"{\"status\":\"error\",\"message\":\"Service unavailable\"}"</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><br></span></code></pre></div></div>
<p>If the mock's script assigns <code>response.body</code> from <code>{{responseBody}}</code>, activating the relevant collection changes the body returned by that mock. The script and mock configuration can stay the same while the scenario data changes. The exact response still depends on how the plugin script uses the variable and on the response configuration.</p>
<p>The same idea can apply to an HTTP request plugin: if its URL, headers, request body or other supported fields use variables, a collection can provide different inputs for different scenarios. For example, one collection could target a test endpoint and another a staging endpoint, or provide different request bodies. This only works for fields and behaviours that the plugin actually supports through variables.</p>
<p>Collections can therefore act as shareable test contexts. A team can prepare values for normal, error, empty-result or boundary-condition scenarios, export them as JSON, and import them into the corresponding user collection on another PacOS instance. After importing, the user activates the collection to apply its values wherever compatible plugins reference them.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="example-use-variables-to-switch-a-mock-response">Example: Use variables to switch a mock response<a href="https://pacos.dev/blog/understanding-variables-in-pacos#example-use-variables-to-switch-a-mock-response" class="hash-link" aria-label="Direct link to Example: Use variables to switch a mock response" title="Direct link to Example: Use variables to switch a mock response" translate="no">​</a></h2>
<p>Suppose a Mock Server script selects a configured response based on a variable. One active collection can provide values for a normal scenario, while another provides values for an error scenario. The same script can then select a response such as HTTP 200 or HTTP 404 based on those values.</p>
<p>This is one example of how variables can change application behaviour without editing each field or script every time. For details on configuring mock definitions and scripts, see <a class="" href="https://pacos.dev/blog/share-rest-soap-mocks-with-pacos">Share REST and SOAP Mocks Across Your Team with PacOS</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="practical-notes">Practical notes<a href="https://pacos.dev/blog/understanding-variables-in-pacos#practical-notes" class="hash-link" aria-label="Direct link to Practical notes" title="Direct link to Practical notes" translate="no">​</a></h2>
<ul>
<li class="">Use system variables for reusable values or JavaScript-generated values that should be available globally.</li>
<li class="">Use plugin variables for values that should remain local to a plugin or one of its collections.</li>
<li class="">Use user collection variables for switching between named sets of values.</li>
<li class="">Use global user variables for user-specific defaults that should remain available while you work.</li>
<li class="">Avoid reusing the same name across scopes unless you intend to rely on the override rules.</li>
<li class="">Be careful with secrets: variable values may be visible in the UI and should not be treated as a secure secret store.</li>
</ul>
<p><a href="https://pacos.dev/" target="_blank" rel="noopener noreferrer" class="">Try PacOS</a> · <a href="https://demo.pacos.dev/" target="_blank" rel="noopener noreferrer" class="">Open the demo</a></p>]]></content>
        <category label="Configuration" term="Configuration"/>
        <category label="Variables" term="Variables"/>
        <category label="PacOS" term="PacOS"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Share REST and SOAP Mocks Across Your Team with PacOS]]></title>
        <id>https://pacos.dev/blog/share-rest-soap-mocks-with-pacos</id>
        <link href="https://pacos.dev/blog/share-rest-soap-mocks-with-pacos"/>
        <updated>2026-06-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Configure WireMock-based REST and SOAP mocks in PacOS, edit responses together, and use variables and JavaScript to model different scenarios.]]></summary>
        <content type="html"><![CDATA[<p>When developing or testing an application, the service it depends on may be unavailable, expensive to use, or difficult to put into a particular state. A mock server lets you return controlled responses instead. The awkward part is often managing those mocks: editing configuration, switching scenarios and making sure everyone on the team is using the same setup.</p>
<p>PacOS includes a <strong>Mock Server</strong> plugin based on WireMock. It adds a graphical interface for working with mock definitions and supports REST and SOAP services. Install it during PacOS setup or later from the in-app App Store.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="work-on-mocks-together">Work on mocks together<a href="https://pacos.dev/blog/share-rest-soap-mocks-with-pacos#work-on-mocks-together" class="hash-link" aria-label="Direct link to Work on mocks together" title="Direct link to Work on mocks together" translate="no">​</a></h2>
<p>The PacOS interface supports real-time collaboration. When one team member makes a change, other people using the plugin see the update without having to manually exchange configuration files.</p>
<p>This is useful when a developer is adjusting a response while a tester exercises the application, or when several people need to investigate the same integration scenario. It does not remove the need to coordinate changes, but it makes the current mock configuration visible to the team in one place.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="configure-rest-and-soap-responses">Configure REST and SOAP responses<a href="https://pacos.dev/blog/share-rest-soap-mocks-with-pacos#configure-rest-and-soap-responses" class="hash-link" aria-label="Direct link to Configure REST and SOAP responses" title="Direct link to Configure REST and SOAP responses" translate="no">​</a></h2>
<p>The plugin is based on WireMock and supports mock definitions for REST and SOAP, including SSL for both variants. You can configure request paths, methods and responses through the interface, then use the mock endpoint from the application or test environment.</p>
<p>For a basic mock, a request can return a configured response. When the scenario needs more flexibility, JavaScript scripts can inspect request data and change the response. A script can also select another response that has already been configured for the mock.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="use-javascript-to-select-or-modify-a-response">Use JavaScript to select or modify a response<a href="https://pacos.dev/blog/share-rest-soap-mocks-with-pacos#use-javascript-to-select-or-modify-a-response" class="hash-link" aria-label="Direct link to Use JavaScript to select or modify a response" title="Direct link to Use JavaScript to select or modify a response" translate="no">​</a></h2>
<p>Scripts have access to the incoming <code>request</code> and the outgoing <code>response</code>. For example, a script can check the request URL and either select a named response or set the response body:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">request</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">url</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">includes</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">myVariable</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </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">    response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">setResponseByName</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">okResponseName</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</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 keyword control-flow" style="color:#00009f">else</span><span class="token plain"> </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">    response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">body</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">myVariable</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</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><br></span></code></pre></div></div>
<p>The <code>{{...}}</code> expressions in this example are PacOS variable placeholders, not ordinary JavaScript string literals. Define the referenced variables in PacOS before using the script. In this example, a matching URL selects a configured response by name; otherwise the response body is set from the variable value.</p>
<p>This makes it possible to model different business scenarios without creating a separate static mock for every case. Use scripts carefully and test the relevant request paths and response outcomes.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="change-mock-behaviour-with-variable-collections">Change mock behaviour with variable collections<a href="https://pacos.dev/blog/share-rest-soap-mocks-with-pacos#change-mock-behaviour-with-variable-collections" class="hash-link" aria-label="Direct link to Change mock behaviour with variable collections" title="Direct link to Change mock behaviour with variable collections" translate="no">​</a></h2>
<p>PacOS variables can change mock behaviour without requiring you to edit the script every time. There are two different concepts to keep separate:</p>
<ul>
<li class=""><strong>Mock Server collection variables</strong> belong to a collection within the Mock Server plugin. They are local to that plugin collection.</li>
<li class=""><strong>User variable collections</strong> are managed in the PacOS Variables module. You can switch the active user collection to provide a different set of values across plugins.</li>
</ul>
<p>For example, a script could use <code>{{responseBody}}</code> when setting a mock response body. One active user collection might define <code>responseBody</code> as a successful response, while another defines it as an error response. Switching the active user collection changes the value supplied to the script, provided no higher-priority variable overrides it and the script uses that value for the response.</p>
<p>User collection variables override Mock Server collection variables with the same name. Global user variables have higher priority than user collection variables. System variables have the lowest priority. The script determines how the effective value affects the response.</p>
<p>For a full explanation of variable scopes, precedence, and editing workflows, see <a class="" href="https://pacos.dev/blog/understanding-variables-in-pacos">Understanding Variables in PacOS</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="switch-collections-and-override-values-during-testing">Switch collections and override values during testing<a href="https://pacos.dev/blog/share-rest-soap-mocks-with-pacos#switch-collections-and-override-values-during-testing" class="hash-link" aria-label="Direct link to Switch collections and override values during testing" title="Direct link to Switch collections and override values during testing" translate="no">​</a></h2>
<p>The Mock Server plugin includes a window for managing variable collections. You can switch the active collection when you need to test another set of conditions.</p>
<p>The built-in <strong>Variables</strong> module can be used to manage user variables. PacOS also provides quick access from the application bar to switch the active collection or temporarily override a variable. System variables are configured separately in PacOS settings.</p>
<p>These options are useful when a test needs to move between normal and error cases—for example, switching from a successful response to a not-found response—without repeatedly editing the mock script itself.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="keep-the-setup-useful-and-predictable">Keep the setup useful and predictable<a href="https://pacos.dev/blog/share-rest-soap-mocks-with-pacos#keep-the-setup-useful-and-predictable" class="hash-link" aria-label="Direct link to Keep the setup useful and predictable" title="Direct link to Keep the setup useful and predictable" translate="no">​</a></h2>
<p>Mocking is most useful when the team understands which scenario is active and what each response represents. Give collections and variables clear names, keep response definitions understandable, and verify that a script selects the intended response for each relevant request.</p>
<p>Because multiple people can edit the same mocks, coordinate changes when testing depends on a specific response. And as with any test service, make sure the mock endpoints and any configured SSL settings fit the environment where they are exposed.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-shared-place-to-manage-test-responses">A shared place to manage test responses<a href="https://pacos.dev/blog/share-rest-soap-mocks-with-pacos#a-shared-place-to-manage-test-responses" class="hash-link" aria-label="Direct link to A shared place to manage test responses" title="Direct link to A shared place to manage test responses" translate="no">​</a></h2>
<p>PacOS brings mock definitions, scripts and variable controls into one interface based on WireMock. It is useful when a team needs to adjust REST or SOAP responses together and switch between scenarios without requiring every participant to edit configuration manually.</p>
<p><a href="https://pacos.dev/" target="_blank" rel="noopener noreferrer" class="">Try PacOS</a> · <a href="https://demo.pacos.dev/" target="_blank" rel="noopener noreferrer" class="">Open the demo</a></p>]]></content>
        <category label="Mocking" term="Mocking"/>
        <category label="Testing" term="Testing"/>
        <category label="Docker" term="Docker"/>
        <category label="PacOS" term="PacOS"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Browse Large Log Files in Docker Without Using the Terminal]]></title>
        <id>https://pacos.dev/blog/browse-large-log-files-in-docker</id>
        <link href="https://pacos.dev/blog/browse-large-log-files-in-docker"/>
        <updated>2026-06-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Open, search and follow log files from a browser with G-Logger in PacOS.]]></summary>
        <content type="html"><![CDATA[<p>When an application runs in containers, checking a log can mean finding the right container, opening a shell, locating the file and running a command. That is manageable for someone comfortable with the terminal, but it is an unnecessary hurdle for teammates who only need to inspect an error or follow what happens during a test.</p>
<p>G-Logger is a PacOS plugin for opening and working with log files in the browser. You can install it during PacOS setup or later from the in-app App Store.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="open-a-log-file">Open a log file<a href="https://pacos.dev/blog/browse-large-log-files-in-docker#open-a-log-file" class="hash-link" aria-label="Direct link to Open a log file" title="Direct link to Open a log file" translate="no">​</a></h2>
<p>G-Logger works on its own. Choose a file from the locations available to PacOS and open it in the viewer. You do not need Explorer just to select and read a log.</p>
<p>The file still needs to be accessible inside the PacOS container. Mount the relevant directory into PacOS and make sure its permissions are appropriate. Installing the plugin does not grant access to files that have not been exposed to the container.
<img decoding="async" loading="lazy" alt="glogg.jpg" src="https://pacos.dev/assets/images/glogg-42aa37f1a77b1d8561004f36fa3bbfdf.jpg" width="1094" height="599" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="inspect-large-files-without-loading-everything-at-once">Inspect large files without loading everything at once<a href="https://pacos.dev/blog/browse-large-log-files-in-docker#inspect-large-files-without-loading-everything-at-once" class="hash-link" aria-label="Direct link to Inspect large files without loading everything at once" title="Direct link to Inspect large files without loading everything at once" translate="no">​</a></h2>
<p>Large log files can be awkward to inspect with tools that try to load or transfer the entire file before showing its contents.</p>
<p>G-Logger uses the <a href="https://vaadin.com/directory/component/file-viewer-for-vaadin" target="_blank" rel="noopener noreferrer" class="">File Viewer for Vaadin add-on</a>, which indexes files and streams content on demand. Once the file has been indexed, you can navigate to available lines without waiting for the whole file to be transferred to the browser. This is useful when the error you are investigating happened much earlier than the latest log entries.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="search-and-follow-several-logs">Search and follow several logs<a href="https://pacos.dev/blog/browse-large-log-files-in-docker#search-and-follow-several-logs" class="hash-link" aria-label="Direct link to Search and follow several logs" title="Direct link to Search and follow several logs" translate="no">​</a></h2>
<p>G-Logger supports searching within a file, following changes as a file grows, and periodically refreshing the view. It also allows multiple tabs to stay open at once.</p>
<p>For example, while reproducing an issue, you can keep the application log and logs from related services open side by side, then search for the same request ID or error message without switching between terminal sessions.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="use-it-with-explorer">Use it with Explorer<a href="https://pacos.dev/blog/browse-large-log-files-in-docker#use-it-with-explorer" class="hash-link" aria-label="Direct link to Use it with Explorer" title="Direct link to Use it with Explorer" translate="no">​</a></h2>
<p>You can use G-Logger by itself, but it also works well alongside PacOS <strong>Explorer</strong>.</p>
<p>Explorer helps you browse mounted directories and manage files. G-Logger is the specialized viewer for reading, searching and following log files. Use Explorer when you need to find or manage a file, then open it in G-Logger to investigate its contents.</p>
<p>See the <a class="" href="https://pacos.dev/blog/manage-files-across-docker-containers">guide to managing files across Docker containers with Explorer</a> for the volume setup and file-management workflow. Both plugins can be installed from the PacOS App Store.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="give-teammates-access-to-the-logs-they-need">Give teammates access to the logs they need<a href="https://pacos.dev/blog/browse-large-log-files-in-docker#give-teammates-access-to-the-logs-they-need" class="hash-link" aria-label="Direct link to Give teammates access to the logs they need" title="Direct link to Give teammates access to the logs they need" translate="no">​</a></h2>
<p>Sometimes a tester or developer needs to inspect a log but does not need shell access to the container. A browser-based viewer gives them a simpler way to read files that the PacOS instance is configured to expose.</p>
<p>This is not a replacement for centralized logging or an observability platform. It is useful when logs already exist as files and you want a straightforward way for the team to inspect them from one place.</p>
<p>Mount only the directories that are needed, review whether they should be writable, and secure access to PacOS. Anyone who can use the viewer may be able to see the contents of the files exposed to that instance.</p>
<p><a href="https://pacos.dev/" target="_blank" rel="noopener noreferrer" class="">Try PacOS</a> · <a href="https://demo.pacos.dev/" target="_blank" rel="noopener noreferrer" class="">Open the demo</a></p>]]></content>
        <category label="Docker" term="Docker"/>
        <category label="Logs" term="Logs"/>
        <category label="PacOS" term="PacOS"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Access Test Databases from Your Browser with PacOS]]></title>
        <id>https://pacos.dev/blog/access-test-databases-from-your-browser</id>
        <link href="https://pacos.dev/blog/access-test-databases-from-your-browser"/>
        <updated>2026-03-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Test environments often contain several databases used by developers, testers, and application teams. Giving everyone access can mean installing a database client, configuring connections, and keeping those tools up to date on individual machines.]]></summary>
        <content type="html"><![CDATA[<p>Test environments often contain several databases used by developers, testers, and application teams. Giving everyone access can mean installing a database client, configuring connections, and keeping those tools up to date on individual machines.</p>
<p>The PacOS Database plugin offers another option: configure database connections in PacOS and access them through its browser-based interface. If PacOS can reach databases running in other containers or elsewhere on the network, it can provide a single place to connect to them—without requiring every team member to install a separate database client.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="one-place-for-databases-across-environments">One place for databases across environments<a href="https://pacos.dev/blog/access-test-databases-from-your-browser#one-place-for-databases-across-environments" class="hash-link" aria-label="Direct link to One place for databases across environments" title="Direct link to One place for databases across environments" translate="no">​</a></h2>
<p>PacOS can connect to databases that are reachable from the PacOS environment and for which a suitable driver and connection configuration are available. This can include databases running in other containers, provided the network and database settings allow the connection.</p>
<p>That means PacOS can reflect the database access available to it and make those connections available through one interface. It does not bypass network boundaries or database permissions: the PacOS environment still needs network access, and the database must accept the configured connection.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="configure-drivers-and-connections-separately">Configure drivers and connections separately<a href="https://pacos.dev/blog/access-test-databases-from-your-browser#configure-drivers-and-connections-separately" class="hash-link" aria-label="Direct link to Configure drivers and connections separately" title="Direct link to Configure drivers and connections separately" translate="no">​</a></h2>
<p>The plugin separates driver configuration from connection configuration:</p>
<ol>
<li class="">Configure the database driver and provide the required driver files and settings.</li>
<li class="">Create a connection that uses that driver, including the relevant authentication and connection details.</li>
<li class="">Check the connection to validate the configuration.</li>
<li class="">Save the configuration and open the database in the Database plugin.</li>
</ol>
<p>Drivers run in isolated classpaths. This design allows the plugin to work with different database engines when an appropriate driver is available, rather than limiting connections to a fixed list of database products.</p>
<p><img decoding="async" loading="lazy" alt="database-configuration.jpg" src="https://pacos.dev/assets/images/database-configuration-e3f9759e9c154ccc032e4128d134c571.jpg" width="1237" height="497" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="browse-the-schema-and-run-sql">Browse the schema and run SQL<a href="https://pacos.dev/blog/access-test-databases-from-your-browser#browse-the-schema-and-run-sql" class="hash-link" aria-label="Direct link to Browse the schema and run SQL" title="Direct link to Browse the schema and run SQL" translate="no">​</a></h2>
<p>After adding a connection, you can refresh its schema when the database type supports schema discovery. The plugin can show available tables and provide table-aware SQL suggestions for supported database engines. You can then open an SQL console for the selected connection and execute queries.</p>
<p>Schema prefetch and table-aware suggestions are currently supported for:</p>
<ul>
<li class="">Oracle</li>
<li class="">PostgreSQL</li>
<li class="">SQLite</li>
<li class="">HSQLDB</li>
</ul>
<p>Other databases may still be usable through a suitable driver and valid connection configuration, but the same schema browser and SQL suggestions are not currently guaranteed.</p>
<p><img decoding="async" loading="lazy" alt="database-view.jpg" src="https://pacos.dev/assets/images/database-view-0fbd46d9fe1115cb8cf67883c13072fe.jpg" width="1101" height="697" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="connection-and-transaction-handling">Connection and transaction handling<a href="https://pacos.dev/blog/access-test-databases-from-your-browser#connection-and-transaction-handling" class="hash-link" aria-label="Direct link to Connection and transaction handling" title="Direct link to Connection and transaction handling" translate="no">​</a></h2>
<p>Connection validation and the underlying handling of connections and transactions are established parts of the plugin. This makes the plugin useful for routine access to test databases from the PacOS environment, without asking every tester or developer to set up a separate client locally.</p>
<p>As with any database client, access depends on the privileges of the configured database account. Use appropriate credentials and grant only the permissions required for the task.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="current-limitations">Current limitations<a href="https://pacos.dev/blog/access-test-databases-from-your-browser#current-limitations" class="hash-link" aria-label="Direct link to Current limitations" title="Direct link to Current limitations" translate="no">​</a></h2>
<p>The Database plugin was one of the first plugins developed for PacOS, and parts of its user interface still need refinement. Its current limitations include:</p>
<ul>
<li class="">Each SQL console is tied to the database connection selected when it was opened.</li>
<li class="">SQL editor contents are not retained as session history when the plugin is restarted. Queries that have not been saved elsewhere may be lost.</li>
<li class="">Schema browsing and table-aware suggestions are currently available only for Oracle, PostgreSQL, SQLite, and HSQLDB.</li>
</ul>
<p>For these reasons, the plugin is best treated as a convenient browser-based way to connect to and query accessible databases—not as a replacement for a fully featured database IDE.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="when-is-it-useful">When is it useful?<a href="https://pacos.dev/blog/access-test-databases-from-your-browser#when-is-it-useful" class="hash-link" aria-label="Direct link to When is it useful?" title="Direct link to When is it useful?" translate="no">​</a></h2>
<p>The plugin is particularly handy when a team needs occasional or straightforward access to test databases, or when several database connections are available from the PacOS environment. Instead of asking each tester or developer to install and configure database software, you can configure the connections centrally in PacOS and make the browser-based interface available to the team.</p>
<p>As always, expose PacOS only to the people who should have access to it, and configure database permissions and network access deliberately.</p>]]></content>
        <category label="database" term="database"/>
        <category label="testing" term="testing"/>
        <category label="development" term="development"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Manage Files Across Docker Containers Without Using the Terminal]]></title>
        <id>https://pacos.dev/blog/manage-files-across-docker-containers</id>
        <link href="https://pacos.dev/blog/manage-files-across-docker-containers"/>
        <updated>2026-01-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Use PacOS Explorer to browse and manage files in shared Docker volumes from one browser-based interface.]]></summary>
        <content type="html"><![CDATA[<p>When a development environment contains multiple containers, files are often scattered across services: application logs, configuration, test fixtures and generated artifacts.</p>
<p>Routine tasks such as retrieving a log, replacing a configuration file or unpacking test data can mean finding the right container and running <code>docker exec</code>, <code>docker cp</code> or shell commands.</p>
<p>PacOS provides a browser-based alternative. Mount the directories you want to work with into the PacOS container, then access them from the Explorer plugin.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-give-pacos-access-to-the-directories-you-need">1. Give PacOS access to the directories you need<a href="https://pacos.dev/blog/manage-files-across-docker-containers#1-give-pacos-access-to-the-directories-you-need" class="hash-link" aria-label="Direct link to 1. Give PacOS access to the directories you need" title="Direct link to 1. Give PacOS access to the directories you need" translate="no">​</a></h2>
<p>PacOS can work with directories mounted into its container. The example below runs two instances of the same backend image, each with its own logs and configuration volume. PacOS mounts those same volumes, so both instances' files are available from one place.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">services</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">pacos</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">image</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> YOUR_PACOS_IMAGE</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">container_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> pacos</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">ports</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 string" style="color:#e3116c">"8086:8086"</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># Example only; use the port configured for your PacOS deployment</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">volumes</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"> backend1_logs</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">/shared/backend1/logs</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"> backend1_config</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">/shared/backend1/config</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"> backend2_logs</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">/shared/backend2/logs</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"> backend2_config</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">/shared/backend2/config</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">restart</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> unless</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">stopped</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">backend1</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">image</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> YOUR_BACKEND_IMAGE</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">volumes</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"> backend1_logs</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">/app/logs</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"> backend1_config</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">/app/config</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">backend2</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">image</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> YOUR_BACKEND_IMAGE</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">volumes</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"> backend2_logs</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">/app/logs</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"> backend2_config</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">/app/config</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">volumes</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">backend1_logs</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">backend1_config</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">backend2_logs</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">  backend2_config</span><span class="token punctuation" style="color:#393A34">:</span><br></span></code></pre></div></div>
<p>Replace <code>YOUR_PACOS_IMAGE</code>, <code>YOUR_BACKEND_IMAGE</code>, the example paths and the port with values from your environment. Both backend services use the same image but have separate volumes, so each instance's files remain distinct. PacOS mounts each volume at its own path.</p>
<p>You can use the same pattern for more instances, other services, existing named volumes or bind mounts. If you scale a single Compose service dynamically, plan how each replica's files are stored and exposed; the explicit <code>backend1</code> and <code>backend2</code> services above illustrate the idea without assuming that every replica gets an automatically separate volume.</p>
<p><strong>Security note:</strong> mount only the directories PacOS needs. Writable mounts allow file changes and deletion. Secure access to PacOS and review the permissions on exposed directories.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-install-the-explorer-plugin">2. Install the Explorer plugin<a href="https://pacos.dev/blog/manage-files-across-docker-containers#2-install-the-explorer-plugin" class="hash-link" aria-label="Direct link to 2. Install the Explorer plugin" title="Direct link to 2. Install the Explorer plugin" translate="no">​</a></h2>
<p>The file-management interface is provided by the <strong>Explorer</strong> plugin. Install it during PacOS setup, or later from the PacOS App Store.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-browse-mounted-files">3. Browse mounted files<a href="https://pacos.dev/blog/manage-files-across-docker-containers#3-browse-mounted-files" class="hash-link" aria-label="Direct link to 3. Browse mounted files" title="Direct link to 3. Browse mounted files" translate="no">​</a></h2>
<p>After the plugin is installed, Explorer lets you browse directories that are accessible inside the PacOS container. You do <strong>not</strong> have to configure named locations for this to work.</p>
<p>The <strong>Locations</strong> section in Explorer is an optional convenience: it lets you create named shortcuts to paths you use often, making them easier to find. It does not grant filesystem access or mount directories by itself. The actual access is determined by the Docker volume or bind-mount configuration.</p>
<p><img decoding="async" loading="lazy" alt="PacOS Application Settings showing optional Explorer locations" src="https://pacos.dev/assets/images/explorer-settings-8f3fb608276bda8eb7951996998f816e.jpg" width="900" height="499" class="img_ev3q"></p>
<p>To add shortcuts, open <strong>Application → Settings → Explorer</strong>, enter a friendly name and a path that exists inside the PacOS container, then save the configuration. Non-existent paths will not be displayed.</p>
<p>For example, shortcuts could be named <code>backend1_logs</code>, <code>backend1_config</code>, <code>backend2_logs</code> and <code>backend2_config</code>, pointing to the corresponding mounted paths.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-manage-files-from-one-place">4. Manage files from one place<a href="https://pacos.dev/blog/manage-files-across-docker-containers#4-manage-files-from-one-place" class="hash-link" aria-label="Direct link to 4. Manage files from one place" title="Direct link to 4. Manage files from one place" translate="no">​</a></h2>
<p>Select a location in Explorer or browse the available filesystem paths directly.</p>
<p><img decoding="async" loading="lazy" alt="PacOS Explorer file manager with directory actions and archive operations" src="https://pacos.dev/assets/images/explorer-file-manager-4ff05c3103d18e6ef3a84703c28e35a5.jpg" width="1012" height="597" class="img_ev3q"></p>
<p>Explorer supports everyday file operations such as:</p>
<ul>
<li class="">Browse directories and open files.</li>
<li class="">Create, rename, copy, move and remove files or directories.</li>
<li class="">Upload and download files.</li>
<li class="">Pack files into supported archive formats and extract archives.</li>
</ul>
<p>This is useful for tasks such as updating configuration, exchanging test data or retrieving generated artifacts without repeatedly switching between containers and running shell commands.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-open-log-files-with-g-logger">5. Open log files with G-Logger<a href="https://pacos.dev/blog/manage-files-across-docker-containers#5-open-log-files-with-g-logger" class="hash-link" aria-label="Direct link to 5. Open log files with G-Logger" title="Direct link to 5. Open log files with G-Logger" translate="no">​</a></h2>
<p>If you often inspect application logs, you can use Explorer together with <strong>G-Logger</strong>, a PacOS plugin for viewing log files. Explorer helps you find and manage files; G-Logger adds log-focused features such as searching, following changes and keeping multiple files open in tabs.</p>
<p>G-Logger can also be used on its own: it includes a file picker, so Explorer is not required just to open a log. Read the <a class="" href="https://pacos.dev/blog/browse-large-log-files-in-docker">G-Logger guide</a> for details about working with large log files.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="one-browser-based-workspace-for-your-environment">One browser-based workspace for your environment<a href="https://pacos.dev/blog/manage-files-across-docker-containers#one-browser-based-workspace-for-your-environment" class="hash-link" aria-label="Direct link to One browser-based workspace for your environment" title="Direct link to One browser-based workspace for your environment" translate="no">​</a></h2>
<p>Mount the directories you want to access into PacOS, then use Explorer to browse and manage them from the browser. Configure named locations only if you want shortcuts to frequently used paths. If you also need to search or follow log files, see the <a class="" href="https://pacos.dev/blog/browse-large-log-files-in-docker">G-Logger guide</a>.</p>
<p>PacOS does not need access to every container's entire filesystem—only to the directories you choose to expose through mounts.</p>
<p><a href="https://pacos.dev/" target="_blank" rel="noopener noreferrer" class="">Try PacOS</a> · <a href="https://demo.pacos.dev/" target="_blank" rel="noopener noreferrer" class="">Open the demo</a></p>]]></content>
        <category label="Docker" term="Docker"/>
        <category label="File Management" term="File Management"/>
        <category label="PacOS" term="PacOS"/>
    </entry>
</feed>