Analyzing and Cleaning Your Jira Data Center Attachments (Python Tool)

There’s a deadline on the horizon. That big move from Jira Data Center to the Cloud is no longer a distant idea – it’s a project on your roadmap. You’ve audited your apps, planned the training, and everything seems under control.

Except for the 500-gigabyte gorilla in the room.

The one everyone quietly avoids discussing. It’s the decade-old archive of every file, log, screenshot, and design mockup your company has ever created, sitting silently in your Jira attachment library. To think you can migrate this digital behemoth “as-is” isn’t just optimistic; it’s one of the most costly and risky mistakes you can make.

The Diagnosis – Why Migrating Blind Is a Catastrophe

Before you can solve the problem, you have to see it. Blindly migrating your entire attachment library will sabotage your project in three silent ways:

  • The “Time Vampire” (Failed Migrations): Atlassian’s migration tools are powerful, but forcing them to move terabytes of data over the internet is a recipe for timeouts and multi-day failures. Every gigabyte of digital junk you try to move is another hour of stressful downtime you can’t afford.
  • The “Money Pit” (Paying for Junk): On-premise storage is cheap. Jira Cloud storage is not. Migrating 500 GB of attachments when your new Standard plan has a 250 GB limit means you are forced into an expensive, mandatory upgrade to the Premium plan from Day 1. You’ll be paying thousands extra each year just to host files from 2015.
  • The “Compliance Landmine” (Hidden Risks): That old attachment library is a graveyard of sensitive data—forgotten customer info, old API keys, confidential reports. Moving it to the cloud without an audit is a security and GDPR risk waiting to happen.

The only way to win is to audit and clean up before you migrate.

The Audit – Free “Pre-Migration Auditor” Tool

Manually checking thousands of projects is not an option. That’s why I built a free, open-source Python tool to do the heavy lifting for you.

Think of this tool as your Pre-Migration Auditor. It’s a simple, 100% read-only script that safely connects to your Data Center instance. It will not change or delete anything. Instead, it produces a single, beautiful HTML report that serves as your “battle plan,” revealing:

  • The true size of your attachment problem.
  • A data-driven list of “Frozen Dinosaur” files that are safe to archive.
  • A breakdown of your “heaviest” and “messiest” projects.

The Action Plan – A Phased Guide to a Clean Migration

So, you have your report. It might be showing hundreds of gigabytes of potential savings. Where do you begin? Don’t try to boil the ocean.

Propose Projects for Archival. The data in your report is your business case. Don’t just ask to archive a project; present a data-driven recommendation: “Project LEGACY is consuming 45 GB of attachment storage. Nobody has updated an issue in it for 3 years. I recommend we use Jira’s built-in Project Archival feature to safely preserve this data and dramatically reduce our migration load and future Cloud costs.”

The Future – How to Keep Your New Cloud Instance Clean

Congratulations! You’ve made a huge impact and de-risked your migration. But let’s be honest—that was a lot of manual work.

After you migrate, you don’t want to do this detective work ever again. You need an automated, 24/7 governance engine. That is exactly why I built Attachment Architect for Jira Cloud.

The free DC tool is a powerful one-time snapshot. The paid Cloud app is your live, continuous command center.

  • What if duplicate cleanup was automatic? The Cloud app has a Bulk Cleanup Center that lets you review and safely delete thousands of files in minutes.
  • What if you were alerted to ‘Dinosaurs’ proactively? The Heat Index dashboard in the Cloud app does this automatically, every single day.
  • What if you could prevent the mess before it starts? The Cloud app’s upcoming automated policies will let you set rules to block duplicates and enforce data retention.

You’ve done the hard work to prepare for your migration. Now, let’s make sure your new home in the Cloud stays clean, fast, and compliant from Day 1.

Get the Free Python Auditor on GitHub

See Attachment Architect for Jira Cloud

Diary of a developer launching app for Jira Data Center

Final logo

All apps of the Atlassian Marketplace have a public story, a refined listing with well-organized feature lists. However, behind each, there is a personal narrative, a history marked by code remarks, late-night commits, and embarrassing replies. This isn’t the public story of our ASiC Viewer for Jira Data Center. This is the private one.

It’s the lightning-fast refactoring, the endless iterations to turn a thought into an idea, shape it into something the Marketplace will accept, and get a new product ready to launch within weeks.

June 3, 2025: Genesis and First taste of Reality

It worked. It was alive. And in my mind, it felt almost ready.

I was wrong. Real-world pressures hit on the very same day the foundation was laid. The initial code had been built with a Jira Server mindset, but the market was already demanding Data Center compatibility. That meant a frantic, almost desperate sequence of commits—not adding shiny new features, but just fighting for survival. Changes flooded into pom.xml and atlassian-plugin.xml, while I wrestled dependencies into place.

  This was by no means a peaceful launching, but a rush to reach the high standard of the Marketplace, with the very first push.

The Mid-June Grind: Bugs, Compatibility, and Finding an Identity

  • June 16: There was a commit with the title “Compatibility fix in JiraAttachmentProvider”. It may seem easy or even obvious, but it was the outcome of the realization that an API call that performed well with our test server did not work the same with a different version of a Jira DC used by another customer. Later that day we committed fixes to our core data models, EdocContainer, SignatureInfo, after realizing that there were some edge cases where we were slightly off in our validation logic. We also provided support of dark themes through the use of CSS, which is a strong indication by the user community in the regard to modern UI requirements. It was a necessity that resulted in version 1.0.1.
  • June 20: Minor, yet important modification: a new logo was made. The first branding was not the right one; it did not have a identity. The commit message “Switched logo asset” was a reminder that an app isn’t just code, it’s a product.

The Marketplace Gauntlet: June 25th

It was the day when we really got to know what it is to be a Marketplace vendor. When our submission delivered some feedback it took us directly back to the code. This was not about new features being added in to the app to make it exciting, it was about technical and security requirement to be an approved app.

The commit log on that day describes a tale of tireless iteration:

  • DC compatibility: updates to pom, atlassian-plugin.xml, README.
  • DC compatibility (servlet and provider): code changes…
  • Compiled 1.0.3 and Marketplace issues…
  • incremented to 1.0.4 with pom and atlassian-plugin.xml tweaks…

The iterations were not to please our users, but to please the gatekeepers. It was a tough but priceless experience that forced me to polish every part of the app, right down to the pom.xml vendor info and the security posture of the SimpleEdocValidationServlet. The files that I have touched most during that time, specifically JiraAttachmentProvider and SimpleEdocValidationServlet, got to be the true hotspots of the codebase, beaten out by the flames of the review process.

The Scars are the Features

Going by the Git history, the actual history of the ASiC Viewer is not the original idea. It’s about resilience. It is about the hundreds of small, micro-improvements a bug fix in a DTO, a compatibility flag in a descriptor, a security patch in a servlet. It is also about hearing feedback, whether it is bug report of a user, a shifting platform requirement, the e-mail reply of a polite but firm rejection of the Marketplace team.

This experience, written in our commit log, is what formed the end product – ASiC Viewer for Jira Data Center.