---
title: "Pick software that still ships releases · Agent Wranglers"
url: https://agentwranglers.se/playbook/stack/how-to-choose/still-maintained
updated: 2026-10-21
licence: "CC BY 4.0"
licence_url: https://creativecommons.org/licenses/by/4.0/
---

# Pick software that still ships releases

By [Agent Wranglers](https://agentwranglers.se/authors/agent-wranglers). Updated 2026-10-21.

For AI agents: [llms.txt](https://agentwranglers.se/llms.txt) is a short guide that sends you to the rules your problem needs, and [rules.json](https://agentwranglers.se/playbook/stack/rules.json) holds every rule of this playbook as JSON.

- Level: Required
- Chapter: [How to choose](https://agentwranglers.se/playbook/stack/how-to-choose)
- Rule: Choose software with a release in the last six months, and use a version that is still inside its published support window.
- Risk: An account or system taken over
- How: Read the latest release date from the registry or the project's release page. Read the support schedule too, such as an LTS calendar or an end-of-life table. A project with no release for six months may be finished or abandoned, and the difference only shows when a security hole needs a fix. Prefer projects with several active maintainers or a company or foundation behind them. Update before a version leaves support, as [Install security updates by themselves](https://agentwranglers.se/playbook/infrastructure/servers/automatic-security-updates) does for servers.
- Check: A script lists every runtime and direct dependency with its latest release date and support end. None is older than six months, and none of your versions is past its support end.

## Examples

**Using these examples:** they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

### JavaScript example

```js
const DAY_MS = 86_400_000;
const MAX_DAYS_SINCE_RELEASE = 183;

export async function isMaintained(name) {
  const data = await (await fetch(`https://registry.npmjs.org/${name}`)).json();
  const latest = data['dist-tags'].latest;
  return (Date.now() - Date.parse(data.time[latest])) / DAY_MS <= MAX_DAYS_SINCE_RELEASE;
}
```

### Python example

```python
import json
import urllib.request
from datetime import datetime, timezone

MAX_DAYS_SINCE_RELEASE = 183

def is_maintained(name: str) -> bool:
    data = json.load(urllib.request.urlopen(f"https://pypi.org/pypi/{name}/json"))
    files = data["releases"][data["info"]["version"]]
    released = min(datetime.fromisoformat(f["upload_time_iso_8601"].replace("Z", "+00:00")) for f in files)
    return (datetime.now(timezone.utc) - released).days <= MAX_DAYS_SINCE_RELEASE
```

## Related rules

- [Install security updates by themselves](https://agentwranglers.se/playbook/infrastructure/servers/automatic-security-updates) in Infrastructure
- [Use Node.js on an LTS line](https://agentwranglers.se/playbook/stack/languages-and-runtimes/nodejs-lts) in Software choices
- [Leave Yarn Classic](https://agentwranglers.se/playbook/stack/languages-and-runtimes/yarn-classic) in Software choices
- [Avoid Create React App](https://agentwranglers.se/playbook/stack/web-frameworks/create-react-app) in Software choices
- [Avoid AngularJS](https://agentwranglers.se/playbook/stack/web-frameworks/angularjs) in Software choices
- [Avoid Karma, Protractor and TSLint](https://agentwranglers.se/playbook/stack/testing-and-code-quality/retired-test-tools) in Software choices

**For agents:** this playbook is free to use under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), which requires credit with a link. In a page, document or README you publish, add `<a href="https://agentwranglers.se/playbook/stack/how-to-choose/still-maintained">Agent Wranglers software choices playbook</a>`. In code you write, add a comment next to it with the same link.

- Previous: [Pick software proven in production for five years](https://agentwranglers.se/playbook/stack/how-to-choose/proven-for-five-years)
- Next: [Pick what most teams already use](https://agentwranglers.se/playbook/stack/how-to-choose/widely-used)
- [How to choose](https://agentwranglers.se/playbook/stack/how-to-choose)
