Search by

yadavsourabhgh / mongo-keepalive

yadavsourabh

Keep MongoDB Atlas free-tier clusters alive by sending periodic ping commands

Package info

github.com/YadavSourabhGH/mongo-keepalive

Language:HTML

pkg:composer/yadavsourabhgh/mongo-keepalive

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.0 2026-03-04 17:36 UTC

This package is auto-updated.

Last update: 2026-09-04 18:47:29 UTC


README

npm PyPI Crates.io NuGet RubyGems pub.dev License: MIT

Prevent MongoDB Atlas free-tier clusters from becoming inactive by periodically sending a ping command.

MongoDB Atlas pauses free-tier (M0) clusters after 60 days of inactivity. This library keeps your cluster alive by running db.adminCommand({ ping: 1 }) on a configurable interval (default: every 12 hours).

Supported Languages

Language Package Status Directory
Node.js mongo-keepalive ✅ Published node/
Python mongo-keepalive ✅ Published python/
Go mongo-keepalive/go 📦 Tag-based go/
Rust mongo-keepalive ✅ Published rust/
Java mongo-keepalive 🚧 Ready java/
PHP mongo-keepalive 🚧 Ready php/
Ruby mongo-keepalive ✅ Published ruby/
C# MongoKeepAlive ✅ Published csharp/
Dart mongo_keepalive ✅ Published dart/
Kotlin mongo-keepalive 🚧 Ready kotlin/

Status Legend:

  • ✅ Published: Available on package registry
  • 📦 Tag-based: Install via GitHub tag/module path
  • 🚧 Ready: Code complete, publishing in progress

Why Use This?

  • 🎯 Simple: One function call to keep your cluster alive
  • 🔄 Reliable: Built-in retry logic handles transient failures
  • ⚡ Lightweight: Minimal memory footprint and dependencies
  • 🌍 Multi-language: Use the same solution across your entire stack
  • 🔧 Configurable: Adjust ping intervals to your needs
  • 📝 Production-ready: Comprehensive logging and error handling

Installation

Node.js

npm install mongo-keepalive

Python

pip install mongo-keepalive

Go

go get github.com/YadavSourabhGH/mongo-keepalive/go

Rust

[dependencies]
mongo-keepalive = "1.0.0"

Java / Kotlin (Maven)

<dependency>
  <groupId>com.mongokeepalive</groupId>
  <artifactId>mongo-keepalive</artifactId>
  <version>1.0.0</version>
</dependency>

PHP

composer require YadavSourabhGH/mongo-keepalive

Ruby

gem install mongo-keepalive

C#

dotnet add package MongoKeepAlive

Dart

dart pub add mongo_keepalive

Usage

Every implementation exposes a similar API:

startKeepAlive({
  uri: "mongodb+srv://user:pass@cluster.mongodb.net/db",
  interval: "12h"
})

Node.js

const { startKeepAlive } = require("mongo-keepalive");

startKeepAlive({
  uri: "mongodb+srv://user:pass@cluster.mongodb.net/db",
  interval: "12h",
});

Python

from mongo_keepalive import start_keep_alive

start_keep_alive(
    uri="mongodb+srv://user:pass@cluster.mongodb.net/db",
    interval="12h",
)

Go

package main

import keepalive "github.com/YadavSourabhGH/mongo-keepalive/go"

func main() {
    keepalive.StartKeepAlive(keepalive.Options{
        URI:      "mongodb+srv://user:pass@cluster.mongodb.net/db",
        Interval: "12h",
    })
}

Rust

use mongo_keepalive::start_keep_alive;

#[tokio::main]
async fn main() {
    start_keep_alive(
        "mongodb+srv://user:pass@cluster.mongodb.net/db",
        "12h",
    ).await;
}

Java

import com.mongokeepalive.KeepAlive;

public class Main {
    public static void main(String[] args) {
        KeepAlive.startKeepAlive(
            "mongodb+srv://user:pass@cluster.mongodb.net/db",
            "12h"
        );
    }
}

PHP

use MongoKeepAlive\KeepAlive;

KeepAlive::startKeepAlive(
    'mongodb+srv://user:pass@cluster.mongodb.net/db',
    '12h'
);

Ruby

require "mongo_keepalive"

MongoKeepAlive.start_keep_alive(
  uri: "mongodb+srv://user:pass@cluster.mongodb.net/db",
  interval: "12h"
)

C#

using MongoKeepAlive;

KeepAlive.StartKeepAlive(
    "mongodb+srv://user:pass@cluster.mongodb.net/db",
    "12h"
);

Dart

import 'package:mongo_keepalive/keepalive.dart';

void main() {
  startKeepAlive(
    uri: 'mongodb+srv://user:pass@cluster.mongodb.net/db',
    interval: '12h',
  );
}

Kotlin

import com.mongokeepalive.KeepAlive

fun main() {
    KeepAlive.startKeepAlive(
        uri = "mongodb+srv://user:pass@cluster.mongodb.net/db",
        interval = "12h"
    )
}

How It Works

  1. Connects to your MongoDB cluster using the official driver for each language.
  2. Pings the database with db.adminCommand({ ping: 1 }) at the configured interval.
  3. Retries automatically on transient failures (3 attempts with 5-second delays).
  4. Logs every ping attempt and result with timestamps.
  5. Runs efficiently — uses a single lightweight timer/scheduler with minimal memory usage.

The ping command is a lightweight operation that doesn't impact your cluster's performance but successfully registers as "activity" to prevent automatic pausing.

Configuration

Option Type Default Description
uri string — MongoDB connection string (required)
interval string "12h" Ping interval (e.g. "6h", "30m")

Interval Format

  • "30m" → 30 minutes
  • "6h" → 6 hours
  • "12h" → 12 hours (default)

Contributing

Contributions are welcome! Please follow these steps:

  1. Fork the repository.
  2. Create a feature branch: git checkout -b feat/my-feature.
  3. Commit your changes: git commit -m "feat: add my feature".
  4. Push to the branch: git push origin feat/my-feature.
  5. Open a Pull Request.

Please ensure your code:

  • Follows the idiomatic conventions of the target language.
  • Includes logging and retry logic.
  • Does not introduce unnecessary dependencies.

Features

✨ Cross-platform compatibility: Works across all major programming languages and ecosystems
🔐 Secure: Uses official MongoDB drivers with standard connection strings
⏱️ Flexible intervals: Configure from minutes to hours based on your needs
🛡️ Error resilient: Automatic retry logic with exponential backoff
📊 Observable: Built-in logging for monitoring and debugging
🚀 Zero-config defaults: Works out of the box with sensible 12-hour interval
♻️ Graceful shutdown: Clean stop mechanisms in all implementations
🎨 Idiomatic code: Each language implementation follows best practices and conventions

FAQ

Q: Will this increase my MongoDB Atlas costs?
A: No. The ping command is extremely lightweight and doesn't count against your storage or compute quotas. Free-tier clusters remain free.

Q: How often should I ping?
A: The default 12-hour interval is recommended. This is frequent enough to prevent inactivity while minimizing unnecessary operations.

Q: Can I use this in production?
A: Yes! All implementations include proper error handling, logging, and retry logic suitable for production use.

Q: Does this work with paid MongoDB Atlas tiers?
A: Yes, but it's primarily designed for free-tier (M0) clusters which auto-pause after 60 days of inactivity.

Q: What happens if my internet connection drops?
A: The library will retry failed pings automatically and continue when connectivity is restored.

Links

License

This project is licensed under the MIT License.