npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@ariian/dtm

v1.2.4

Published

Dotfile Time Machine — automated dotfile snapshots with GitHub backup

Readme

🕰️ dtm

Dotfile Time Machine. Automatically snapshots your config files and pushes them to a private GitHub repo on a schedule.

npm version npm downloads license node


DTM came from the frustration of tweaking dotfiles or config files, accidentally breaking things weeks later, and having no idea what changed. The goal was to create something simple that quietly backs up your files to GitHub on a schedule, makes it easy to track changes over time, and lets you roll back any file to a previous version whenever needed.


Install

npm install -g @ariian/dtm

Setup

dtm init

You'll be prompted for:

? GitHub repo URL (SSH or HTTPS): [email protected]:you/dotfiles-backup.git
? How often should snapshots run? Once a day
? Auto-push to GitHub after every snapshot? Yes
? Select dotfiles to track: ~/.zshrc, ~/.gitconfig

Create a private GitHub repo before running dtm init.


GitHub Connection

SSH (recommended)

Use an SSH URL when prompted:

[email protected]:you/dotfiles-backup.git

Make sure your SSH key is added to your macOS Keychain so pushes work silently in the background:

ssh-add --apple-use-keychain ~/.ssh/id_ed25519

Test it:

ssh -T [email protected]
# Hi you! You've successfully authenticated.

HTTPS

Use an HTTPS URL when prompted:

https://github.com/you/dotfiles-backup.git

Store your GitHub Personal Access Token in macOS Keychain:

git config --global credential.helper osxkeychain

How it works

1. you run       →  dtm snapshot
2. dtm copies    →  your tracked dotfiles into ~/.dtm/
3. dtm commits   →  git commit -m "snapshot 2026-05-23 22:00:00"
4. dtm pushes    →  git push origin main
5. done          →  ✔ snapshot saved and pushed to GitHub

On a schedule, this runs automatically via macOS launchd.


Upgrading from v1.1.x

v1.2.0 changed how files are stored inside ~/.dtm/ — nested files now mirror their original directory structure (e.g. ~/.ssh/config is stored as .ssh/config instead of just config). Root-level dotfiles like .zshrc and .gitconfig are unaffected.

If you tracked any nested files, run once after upgrading:

dtm migrate

This moves your stored files to the new structure, updates your config, and commits the change — no data is lost.


Commands

Setup

dtm init                        # first time setup wizard
dtm status                      # show tracked files, last snapshot, schedule

Snapshots

dtm snapshot                    # take a snapshot now
dtm log                         # show full snapshot history

File Tracking

dtm watch ~/.npmrc              # start tracking a new file
dtm watch ~/Library/Application\ Support/Code/User/settings.json
dtm unwatch ~/.vimrc            # stop tracking a file

Add any file to your snapshot with dtm watch <path>.

Diffing

dtm diff                        # what changed since last snapshot
dtm diff .zshrc                 # what changed in one specific file
dtm diff .ssh/config            # nested files use the relative path

Restoring

dtm restore .zshrc              # restore .zshrc to 1 snapshot ago (default)
dtm restore .zshrc -n 5        # restore .zshrc to 5 snapshots ago
dtm restore .ssh/config -n 2   # nested files use the relative path

Scheduling

dtm schedule                    # enable automatic snapshots via launchd
dtm schedule --off              # disable automatic snapshots

Scheduling is enabled automatically during dtm init. You can disable or re-enable it anytime with the commands above.

Reset

dtm reset                       # remove all dtm data and config

Migration

dtm migrate                     # migrate stored files to the new path structure (v1.2.0+)

Node flags

dtm --version                   # print version number
dtm --help                      # show all commands

File locations

~/.dtm/                         # git snapshot repo
~/.config/dtm/config.json       # dtm config file
~/Library/LaunchAgents/
  com.dtm.snapshot.plist        # launchd scheduler (after dtm schedule)

License

MIT © Arian Najafi Yamchelo — arii.dev