
Research
Supply Chain Attack on Axios Pulls Malicious Dependency from npm
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.
bootstrap-progress-extension
Advanced tools
Enhanced progress components with circular progress and animations for Bootstrap 5
Enhanced progress components with circular progress and animations for Bootstrap 5.

This package provides:
data-bs-* attributes (Recommended, aligns with Bootstrap)data-bs-config JSON attribute (Legacy)npm install bootstrap-progress-extension
Include the CSS and JavaScript files in your project:
<!-- For production -->
<link href="path/to/bootstrap-progress-extension.min.css" rel="stylesheet">
<script src="path/to/bootstrap-progress-extension.min.js"></script>
<!-- For development/debugging -->
<link href="path/to/bootstrap-progress-extension.css" rel="stylesheet">
<script src="path/to/bootstrap-progress-extension.js"></script>
Progress bars are configured primarily using data attributes. You can use individual attributes (recommended) or a single JSON attribute.
Precedence: JavaScript constructor options > Individual data-bs-* attributes > data-bs-config JSON > Defaults.
<!-- Using individual attributes (Recommended) -->
<div class="progress" role="progressbar" aria-label="Basic example"
aria-valuenow="75" aria-valuemin="0" aria-valuemax="100"
data-bs-duration="2000" data-bs-animation>
<div class="progress-bar"></div>
</div>
<!-- Using JSON attribute -->
<div class="progress" role="progressbar" aria-label="Basic example (JSON)"
aria-valuenow="50" aria-valuemin="0" aria-valuemax="100"
data-bs-config='{"duration": 2500, "animation": true}'>
<div class="progress-bar bg-info"></div>
</div>
Important: For circular progress bars, include the standard .progress.circular and .progress-bar elements, along with a <div class="progress-label">...%</div> inside the .progress-bar. The script automatically injects the necessary decorative elements (.circle-background, .circle-progress). Do not include them in your source HTML.
<!-- Using individual attributes (Recommended) -->
<div class="progress circular" role="progressbar" aria-label="Circular progress"
aria-valuenow="75" aria-valuemin="0" aria-valuemax="100"
data-bs-stroke-width="15" data-bs-animate-in-viewport="true" data-bs-animation>
<div class="progress-bar bg-success">
<div class="progress-label">75%</div>
<!-- .circle-background and .circle-progress are added here -->
</div>
</div>
<!-- Using JSON attribute -->
<div class="progress circular" role="progressbar" aria-label="Circular progress (JSON)"
aria-valuenow="60" aria-valuemin="0" aria-valuemax="100"
data-bs-config='{"strokeWidth": 10, "size": 150, "animation": true}'>
<div class="progress-bar bg-danger">
<div class="progress-label">60%</div>
<!-- .circle-background and .circle-progress are added here -->
</div>
</div>
Wrap your progress bar in a container with dir="rtl". Configuration works the same way.
<div dir="rtl">
<!-- Circular Progress in RTL (Individual Attrs) -->
<div class="progress circular" role="progressbar" aria-label="تقدم دائري"
aria-valuenow="65" aria-valuemin="0" aria-valuemax="100"
data-bs-stroke-width="15" data-bs-duration="2000" data-bs-animation>
<div class="progress-bar bg-primary">
<div class="progress-label">٦٥٪</div>
</div>
</div>
<!-- Standard Progress Bar in RTL (Individual Attrs) -->
<div class="progress" role="progressbar" aria-label="شريط التقدم"
aria-valuenow="70" aria-valuemin="0" aria-valuemax="100"
data-bs-duration="1800" data-bs-animation>
<div class="progress-bar bg-success"></div>
</div>
</div>
Progress bars added dynamically to the DOM after page load will be automatically initialized:
// Create a progress bar dynamically
const progressBar = document.createElement('div');
progressBar.className = 'progress';
progressBar.setAttribute('role', 'progressbar');
progressBar.setAttribute('aria-label', 'Dynamic progress');
progressBar.setAttribute('aria-valuenow', '60');
progressBar.setAttribute('aria-valuemin', '0');
progressBar.setAttribute('aria-valuemax', '100');
const bar = document.createElement('div');
bar.className = 'progress-bar bg-success';
bar.style.width = '0%';
progressBar.appendChild(bar);
// Example of setting individual attributes dynamically
progressBar.setAttribute('data-bs-animation', 'true');
progressBar.setAttribute('data-bs-duration', '1000');
document.body.appendChild(progressBar);
// No manual initialization needed - MutationObserver will detect and initialize it
Configuration can be set via data attributes. Individual data-bs-* attributes are recommended.
Precedence: JavaScript constructor options > Individual data-bs-* attributes > data-bs-config JSON > Defaults.
| Attribute / Option | Type | Default | Description |
|---|---|---|---|
data-bs-stroke-width | Number | 15 | (Circular only) Stroke width in pixels. Corresponds to strokeWidth JS/JSON option. |
data-bs-size | Number | 120 | (Circular only) Size in pixels. Corresponds to size JS/JSON option. |
data-bs-duration | Number | 1500 | Animation duration in milliseconds. Corresponds to duration JS/JSON option. |
data-bs-delay | Number | 0 | Delay before animation starts in milliseconds. Corresponds to delay JS/JSON option. |
data-bs-animation | Boolean | true | Enable animation. Omit or set ="false" to disable. Corresponds to animation JS/JSON option. |
data-bs-animate-in-viewport | Boolean | true | Only animate when the element enters the viewport. Set ="false" to disable. Corresponds to animateInViewport JS/JSON option. |
data-bs-config | String | null | (Legacy) A JSON string containing multiple options (e.g., '{"strokeWidth": 10, "animation": true}'). |
Note: For boolean attributes like data-bs-animation, simply adding the attribute implies true. You only need to add ="false" to explicitly disable it.
The appearance of the circular progress bars can be customized using the following CSS custom properties:
| Variable | Description | Default Value | Controlled By |
|---|---|---|---|
--circle-size | The overall width and height of the circular progress component. | 120px | size config option |
--circle-thickness | The thickness of the progress ring. | 15px | strokeWidth config option |
--arc-color | The color of the progress arc. Determined by bg-* classes. | var(--bs-progress-bar-bg) | bg-* CSS class |
--progress-angle | The calculated angle (0-360deg) representing the current progress visually. | 0deg | JavaScript (setValue) |
Note: While --arc-color and --progress-angle are used internally, you typically control the appearance via configuration options (data-bs-size, data-bs-stroke-width) and standard Bootstrap background utility classes (bg-primary, bg-success, etc.) rather than setting these CSS variables directly.
This extension leverages standard Bootstrap CSS variables for theming and consistency:
| Bootstrap Variable | How It's Used |
|---|---|
--bs-progress-bg | Background color for the track of standard progress bars and the inactive portion of the circular progress ring. |
--bs-progress-bar-bg | Default color for the active arc of circular progress bars (used when no specific bg-* class is applied). |
--bs-success | Color for the active arc when .bg-success is used on the circular progress bar. |
--bs-danger | Color for the active arc when .bg-danger is used on the circular progress bar. |
--bs-warning | Color for the active arc when .bg-warning is used on the circular progress bar. |
--bs-info | Color for the active arc when .bg-info is used on the circular progress bar. |
--bs-body-bg | Background color used for the inner cutout area of the circular progress bar (to match the page background). |
--bs-body-color | Default text color for the percentage label inside circular progress bars. |
--bs-dark | Text color used for the percentage label specifically when the circular progress bar has the .bg-light class. |
Working with progress bars programmatically:
// Create a new progress bar instance
const progressElement = document.querySelector('.progress');
const progressBar = new ProgressBar(progressElement);
// Set value without animation
progressBar.setValue(75);
// Animate to value (target percentage, optional duration)
progressBar.animate(90, 2000);
// Initialize to 0%
progressBar.initialize();
Bootstrap Progress Bar Extension are built with accessibility in mind:
role="progressbar", aria-valuenow, aria-valuemin, aria-valuemax, and aria-label)prefers-reduced-motion browser setting, disabling animations for users who prefer reduced motiondir="rtl" attributeMIT
FAQs
Enhanced progress components with circular progress and animations for Bootstrap 5
We found that bootstrap-progress-extension demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.

Research
Malicious versions of the Telnyx Python SDK on PyPI delivered credential-stealing malware via a multi-stage supply chain attack.

Security News
TeamPCP is partnering with ransomware group Vect to turn open source supply chain attacks on tools like Trivy and LiteLLM into large-scale ransomware operations.