mrkeyoor.com_
Thu 03 Sept 14:34 UTC
Automationevaluationupdated 03 Sept 2026

acme.sh review

acme.sh is a Shell client that requests, renews, and deploys TLS certificates through the ACME protocol. It replaces manual certificate expiry work with scheduled renewal and supports webroot, standalone server, web server, and DNS validation paths.

trackingstars / 7d
Verdict

Our standard sandbox could not run acme.sh at commit 9656842 because Shell is outside its supported ecosystems, so we cannot give you a passing test or build result. Use acme.sh when a small Unix client and its specific DNS or deployment hooks match your infrastructure. Choose a packaged or platform-native client if signed release artifacts, native Windows operation, or lower provider-integration risk is mandatory.

We ran it

Screenshot of acme.sh (acme.sh)

Answers from our run

Did you run acme.sh yourself?

No. Its code is Shell, and it carries no manifest our lab installs from, so there was nothing standard to install, build or test. This review is written from the repository's own documentation.

Who should not use acme.sh?

Teams that require a signed current release: the latest GitHub release is v3.1.4, and the README says tags through v3.1.4 are unsigned.

What are the alternatives to acme.sh?

Certbot, Lego, win-acme. sh at commit 9656842 because Shell is outside its supported ecosystems, so we cannot give you a passing test or build result.

Setup4/5One script, but domain validation and deploy hooks still need setup
Docs4/5Clear modes and warnings, with deeper details spread across the wiki
Community5/547,576 stars, a September push, and current issue activity
Maturity4/5Long-lived client with broad hooks; current release is unsigned

Who it’s for

Unix administrators who want certificate automation without installing Python or running a resident service.
Operators whose DNS provider or appliance has a supported acme.sh hook.
Self-hosters who want certificate files copied to explicit destinations with a reload command they control.
Teams that need one client across Linux, BSD, macOS, Solaris, or Windows under Cygwin.

Who it’s NOT for

Teams that require a signed current release: the latest GitHub release is v3.1.4, and the README says tags through v3.1.4 are unsigned.
Operators using manual DNS who expect unattended renewal: the README says that mode requires a new TXT record for every renewal.
Azure Arc users relying on managed identity: issue 4567 says the Azure DNS hook does not support the Arc metadata endpoint.
Administrators who want the client to own their permanent Nginx or Apache configuration: the documented modes issue certificates but leave the production certificate paths and server configuration to you.
Windows users unwilling to run Cygwin with curl, OpenSSL, and crontab: that is the Windows environment listed in the tested-platform table.

Setup reality

Our lab did not run commit 9656842 because its supported harness ecosystems do not include Shell; the repository does contain a Dockerfile. We therefore have no measured install, build, test, dependency, or audit result for this checkout.

Issuance needs control of a domain and either a writable webroot, free access to port 80 or 443, or DNS credentials. Deployment also needs destination paths and a working reload command for the receiving service.

The installer writes under ~/.acme.sh, adds a shell alias, and creates a cron entry. Manual DNS cannot renew by itself, Windows support assumes Cygwin, and provider hooks inherit the behavior and credential model of each external API.

Version 3.1.4 automates the whole certificate lifecycle

acme.sh is a Shell implementation of the ACME protocol, the standard used to prove control of a domain and obtain a TLS certificate. Version 3.1.4 can create an account, issue an ECC or RSA certificate, renew it, copy the result to production paths, and call a reload command. It works without a Python runtime and does not require root for ordinary installation. Root or equivalent permission still becomes necessary when a chosen validation or deployment method touches protected ports, server processes, or certificate destinations.

The installation model is unusually transparent. The installer copies the client into ~/.acme.sh, adds an alias, and creates a cron entry. Release 3.1.4 changed that scheduled job to run every 6 hours so it can respond to a certificate authority's ACME Renewal Information window. The same release added account key rollover, multiple account emails, retry behavior for failed install and deploy steps, and more DNS and appliance hooks. Those are operational features, not decorative command flags.

Seven validation modes cover servers, DNS, and persistent records

The README documents 7 broad validation choices: webroot, standalone HTTP, standalone TLS, Apache, Nginx, DNS, and stateless operation, plus DNS alias and persistent-record variants. Webroot is the conservative choice for an existing site because acme.sh writes a challenge file under a directory the web server already exposes. Standalone mode needs port 80 free, while the TLS variant needs port 443. Apache and Nginx modes interact with those servers for validation but do not permanently configure certificate paths for you.

DNS validation is the route to wildcard certificates and hosts that cannot expose an HTTP challenge. Automatic renewal depends on a compatible provider API and credentials that can edit TXT records. Manual DNS is explicitly a manual lifecycle: every renewal needs another TXT value. The newer persistent DNS method reuses a long-lived record, but it also depends on certificate-authority support for that draft mechanism. Anyone selecting a DNS mode should test renewal, not stop after the first successful certificate.

What happened when we ran it

Our 3-CPU, 8 GB sandbox did not execute acme.sh at commit 9656842 because the lab has no supported ecosystem for Shell repositories. The checkout has a Dockerfile, but the supplied measurement records no container build, install, test, dependency, or vulnerability result. That means this review has no basis for claiming that the commit passed its test suite or that its image built cleanly. The absence of a run is a limit on our evidence, not a failed project command.

The missing run matters more here than it would for a static utility. A meaningful ACME check needs a certificate authority, domain validation, network reachability, and often DNS or deployment credentials. Our unprivileged container had no secrets, so it could not reproduce a real renewal and service reload even if the Shell harness had accepted the repository. Before adoption, run the staging endpoint for your chosen authority and verify the complete renewal path on the target operating system.

Provider hooks trade broad coverage for provider-specific failures

The appeal of acme.sh is its large collection of DNS, deployment, and notification hooks. Release 3.1.4 added 15 named DNS providers, three deploy targets, and a custom notification hook. Each integration is still a small adapter around an external service that can change authentication, endpoints, or payload rules. Issue 4567, updated on September 3, 2026, says the Azure DNS hook's managed-identity path does not handle the local metadata endpoint used by Azure Arc machines.

Other recent reports show the same maintenance pressure. Issue 7212 records a Telegram notification failure caused by characters rejected by Telegram's formatting parser. Issue 7204 describes a TrueNAS WebSocket deployment failure against a beta release, while issue 7206 proposes a different remote TrueNAS route without the local Python-based tool. These reports do not prove that every hook is unreliable. They do show why the exact provider, authentication method, and appliance version belong in your pre-deployment test.

The current release is unsigned, while development remains active

GitHub lists v3.1.4, published July 17, 2026, as the latest release. The README says release signing begins with v3.1.5 and plainly notes that tags through v3.1.4 predate the signing key. Organizations that require cryptographic provenance for a pinned production artifact therefore lack a signed current release tag. Building from a verified tag becomes an option only once that documented signing practice reaches a published release.

The project was pushed on September 1, 2026, and GitHub showed 102 open issues and pull requests when fetched. Recent closures include an Azure DNS token-renewal problem and the request to sign releases, while an older Azure Arc request remained active on September 3. That combination points to ongoing maintenance with a sizeable integration queue, not abandonment. The repository's 47,576 stars indicate reach, although stars do not tell you whether your DNS provider's hook works today.

acme.sh fits best beside infrastructure you already understand

Choose acme.sh when you know where challenge files should go, which account should edit DNS, where the deployed key belongs, and which command safely reloads the service. Its one-script design reduces runtime baggage, and the explicit install-cert step discourages applications from reading internal files under ~/.acme.sh. The 6-hour cron schedule and ARI support also address renewal timing without requiring a resident control plane.

Skip it when your team wants certificates as a managed platform feature rather than a script it owns. The current unsigned v3.1.4 tag is a firm blocker for some supply-chain policies, and an untested provider hook can turn silent renewal failure into an outage weeks later. acme.sh is a strong Unix operator's tool, but the correct buying test is a staged renewal and reload using your real provider and service, not a successful first issuance.

Alternatives

ProjectWhat it isPick it when
CertbotThe Electronic Frontier Foundation's Python ACME client with installer plugins for common web servers.pick this instead when your distribution packages Certbot and you want its Apache or Nginx integration model.
Lego gh↗A Go ACME client and library with DNS provider integrations.pick this instead when you prefer a compiled binary or need ACME embedded in a Go program.
win-acmeA Windows-focused ACME client built around Windows services and IIS workflows.pick this instead when native Windows and IIS support matters more than Unix portability.

What people are saying

  1. [velocity-scout] acmesh-official/acme.sh

Sources

  1. acme.sh repository and README
  2. acme.sh v3.1.4 release
  3. Azure Arc managed identity report
  4. Telegram notification parsing report
  5. TrueNAS 26 WebSocket deployment report
  6. Remote TrueNAS deploy hook proposal

More automation reviews

espanso · follow-builders · CloakBrowser · freqtrade · stagehand · Win11Debloat · the whole board →