<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Asset Bundles: Shared libraries and notebooks in monorepo multi-bundle setup in Data Engineering</title>
    <link>https://community.databricks.com/t5/data-engineering/asset-bundles-shared-libraries-and-notebooks-in-monorepo-multi/m-p/165122#M55397</link>
    <description>&lt;P&gt;Your proposed structure is sensible — it is the standard pattern for large-team monorepo setups with Databricks Asset Bundles. Here is a more complete answer to both questions you raised.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;1. Shared Python libraries: build a wheel, wire it as a bundle artifact&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Package shared_libraries/ as a standard Python wheel (setup.py or pyproject.toml). In each bundle's databricks.yml, declare it as an artifact with a relative path pointing up to the shared directory. Set a build command under the target so DABs builds the wheel during "databricks bundle deploy". It will then install it on cluster automatically via the bundle's library configuration — no %pip install needed in notebooks.&lt;/P&gt;&lt;P&gt;The key configuration: set "type: whl", "path: ../shared_libraries", and "build: pip install build &amp;amp;&amp;amp; python -m build" under the target. DABs resolves the path relative to the bundle's databricks.yml file, so ../shared_libraries correctly reaches the sibling directory at the monorepo root.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;2. Shared notebooks: use relative path references, never copy&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;DABs resolves notebook_path values relative to the databricks.yml that declares the job. For notebooks that live above the bundle root, use "../" traversal: "notebook_path: ../../shared_notebooks/transform_utils". This works for any depth as long as the target path stays within the repository root.&lt;/P&gt;&lt;P&gt;The critical rule: do not copy shared notebooks into each bundle's src/ directory. Copies drift immediately once the shared notebook is updated and you forget to propagate the change.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;3. Shared variables: root-level variables.yml with include&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Place a variables.yml at the monorepo root with catalog_name, environment prefix, and any other cross-bundle constants. In each bundle's databricks.yml, add an "include: [../variables.yml]" block. Bundle-level variables with the same key override root-level ones, so you get shared defaults with clean per-bundle overrides where needed.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;On whether splitting one large bundle into domain bundles is the right call&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Yes, for your situation it is. A monorepo with multiple bundles is the right pattern when teams share the same CI pipeline and deployment cadence, shared library code changes infrequently or is versioned via the wheel, and you want cross-bundle dependency visibility in a single repository.&lt;/P&gt;&lt;P&gt;The only reason to split into separate repositories is if business domains have genuinely different release cycles (one team ships 10 times a day, another ships weekly), if repository-level access control is required for compliance, or if the CI pipeline becomes too slow even with path-based change filtering. For most teams under roughly 30 engineers and 5 business domains, the monorepo structure you described handles this cleanly.&lt;/P&gt;</description>
    <pubDate>Sat, 08 Aug 2026 03:11:55 GMT</pubDate>
    <dc:creator>DoTA</dc:creator>
    <dc:date>2026-08-08T03:11:55Z</dc:date>
    <item>
      <title>Asset Bundles: Shared libraries and notebooks in monorepo multi-bundle setup</title>
      <link>https://community.databricks.com/t5/data-engineering/asset-bundles-shared-libraries-and-notebooks-in-monorepo-multi/m-p/119351#M45848</link>
      <description>&lt;P&gt;I am part of a small team of Data Engineers which started using Databricks Asset Bundles one year ago. Our code base consists of typical ETL-workloads written primarily in Jupyter notebooks (.ipynb), and jobs (.yaml) with our codebase spanning across a large number of different business domains.&lt;/P&gt;&lt;P&gt;Currently, our code base consists of a single monorepo with one large bundle containing all our notebooks, jobs, libraries etc.&lt;/P&gt;&lt;P&gt;Our code base has grown to a size where we see the need to split our single bundle into several smaller bundles - one for each business domain.&lt;/P&gt;&lt;P&gt;We are envisioning a setup similar to the following (simplified) structure:&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;monorepo/
│
├── shared_notebooks/
├── shared_libraries/
├── variables.yml
│
├── Bundle_A/
│   ├── resources/
│   ├── src/
│   └── databricks.yml
│
└── Bundle_B/
    ├── resources/
    ├── src/
    └── databricks.yml&lt;/LI-CODE&gt;&lt;P&gt;Where the repo contains some shared notebooks and libraries which may be used in all bundles in our repository.&lt;/P&gt;&lt;P&gt;Does anyone have some suggestions for how this should be implemented?&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;How can we "import" shared assets (notebooks, libraries and variables) into our bundles?&lt;/LI&gt;&lt;LI&gt;Does our approach to splitting up our mono-bundle repository seem sensible?&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;Thanks in advance for your insights!&lt;/P&gt;&lt;P&gt;Kaspar Hauser&lt;/P&gt;</description>
      <pubDate>Thu, 15 May 2025 14:53:48 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/asset-bundles-shared-libraries-and-notebooks-in-monorepo-multi/m-p/119351#M45848</guid>
      <dc:creator>auso</dc:creator>
      <dc:date>2025-05-15T14:53:48Z</dc:date>
    </item>
    <item>
      <title>Re: Asset Bundles: Shared libraries and notebooks in monorepo multi-bundle setup</title>
      <link>https://community.databricks.com/t5/data-engineering/asset-bundles-shared-libraries-and-notebooks-in-monorepo-multi/m-p/130501#M48809</link>
      <description>&lt;P&gt;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/164631"&gt;@auso&lt;/a&gt;&amp;nbsp;, did you get an answer or a solution?&lt;/P&gt;</description>
      <pubDate>Tue, 02 Sep 2025 11:15:20 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/asset-bundles-shared-libraries-and-notebooks-in-monorepo-multi/m-p/130501#M48809</guid>
      <dc:creator>bee-jugger</dc:creator>
      <dc:date>2025-09-02T11:15:20Z</dc:date>
    </item>
    <item>
      <title>Re: Asset Bundles: Shared libraries and notebooks in monorepo multi-bundle setup</title>
      <link>https://community.databricks.com/t5/data-engineering/asset-bundles-shared-libraries-and-notebooks-in-monorepo-multi/m-p/130515#M48816</link>
      <description>&lt;P&gt;Yes, it's feasible. In DAB you just need to use&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/dev-tools/bundles/settings#paths" target="_self"&gt;paths&lt;/A&gt;&amp;nbsp;to import common libraries.&lt;/P&gt;</description>
      <pubDate>Tue, 02 Sep 2025 12:32:24 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/asset-bundles-shared-libraries-and-notebooks-in-monorepo-multi/m-p/130515#M48816</guid>
      <dc:creator>Witold</dc:creator>
      <dc:date>2025-09-02T12:32:24Z</dc:date>
    </item>
    <item>
      <title>Re: Asset Bundles: Shared libraries and notebooks in monorepo multi-bundle setup</title>
      <link>https://community.databricks.com/t5/data-engineering/asset-bundles-shared-libraries-and-notebooks-in-monorepo-multi/m-p/130516#M48817</link>
      <description>&lt;P&gt;1. the easiest way to do this is to package your shared librabries into a wheel (suppose you use python).&amp;nbsp; Like that you do not have to mess with the pythonpath and you can install these libs automatically to any cluster (via policies or dabs or whatever).&lt;/P&gt;&lt;P&gt;2. totally makes sense, we do it in a similar way&lt;/P&gt;</description>
      <pubDate>Tue, 02 Sep 2025 12:53:08 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/asset-bundles-shared-libraries-and-notebooks-in-monorepo-multi/m-p/130516#M48817</guid>
      <dc:creator>-werners-</dc:creator>
      <dc:date>2025-09-02T12:53:08Z</dc:date>
    </item>
    <item>
      <title>Re: Asset Bundles: Shared libraries and notebooks in monorepo multi-bundle setup</title>
      <link>https://community.databricks.com/t5/data-engineering/asset-bundles-shared-libraries-and-notebooks-in-monorepo-multi/m-p/165122#M55397</link>
      <description>&lt;P&gt;Your proposed structure is sensible — it is the standard pattern for large-team monorepo setups with Databricks Asset Bundles. Here is a more complete answer to both questions you raised.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;1. Shared Python libraries: build a wheel, wire it as a bundle artifact&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Package shared_libraries/ as a standard Python wheel (setup.py or pyproject.toml). In each bundle's databricks.yml, declare it as an artifact with a relative path pointing up to the shared directory. Set a build command under the target so DABs builds the wheel during "databricks bundle deploy". It will then install it on cluster automatically via the bundle's library configuration — no %pip install needed in notebooks.&lt;/P&gt;&lt;P&gt;The key configuration: set "type: whl", "path: ../shared_libraries", and "build: pip install build &amp;amp;&amp;amp; python -m build" under the target. DABs resolves the path relative to the bundle's databricks.yml file, so ../shared_libraries correctly reaches the sibling directory at the monorepo root.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;2. Shared notebooks: use relative path references, never copy&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;DABs resolves notebook_path values relative to the databricks.yml that declares the job. For notebooks that live above the bundle root, use "../" traversal: "notebook_path: ../../shared_notebooks/transform_utils". This works for any depth as long as the target path stays within the repository root.&lt;/P&gt;&lt;P&gt;The critical rule: do not copy shared notebooks into each bundle's src/ directory. Copies drift immediately once the shared notebook is updated and you forget to propagate the change.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;3. Shared variables: root-level variables.yml with include&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Place a variables.yml at the monorepo root with catalog_name, environment prefix, and any other cross-bundle constants. In each bundle's databricks.yml, add an "include: [../variables.yml]" block. Bundle-level variables with the same key override root-level ones, so you get shared defaults with clean per-bundle overrides where needed.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;On whether splitting one large bundle into domain bundles is the right call&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Yes, for your situation it is. A monorepo with multiple bundles is the right pattern when teams share the same CI pipeline and deployment cadence, shared library code changes infrequently or is versioned via the wheel, and you want cross-bundle dependency visibility in a single repository.&lt;/P&gt;&lt;P&gt;The only reason to split into separate repositories is if business domains have genuinely different release cycles (one team ships 10 times a day, another ships weekly), if repository-level access control is required for compliance, or if the CI pipeline becomes too slow even with path-based change filtering. For most teams under roughly 30 engineers and 5 business domains, the monorepo structure you described handles this cleanly.&lt;/P&gt;</description>
      <pubDate>Sat, 08 Aug 2026 03:11:55 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/asset-bundles-shared-libraries-and-notebooks-in-monorepo-multi/m-p/165122#M55397</guid>
      <dc:creator>DoTA</dc:creator>
      <dc:date>2026-08-08T03:11:55Z</dc:date>
    </item>
  </channel>
</rss>

