dnshe-freedomains

Use DNSHE to register, manage, and automate free subdomains (us.ci, cc.cd, de5.net, ccwu.cc) with Anycast DNS via dashboard or REST API.

22 stars

Best use case

dnshe-freedomains is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Use DNSHE to register, manage, and automate free subdomains (us.ci, cc.cd, de5.net, ccwu.cc) with Anycast DNS via dashboard or REST API.

Teams using dnshe-freedomains should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/dnshe-freedomains/SKILL.md --create-dirs "https://raw.githubusercontent.com/Aradotso/trending-skills/main/skills/dnshe-freedomains/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/dnshe-freedomains/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How dnshe-freedomains Compares

Feature / Agentdnshe-freedomainsStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Use DNSHE to register, manage, and automate free subdomains (us.ci, cc.cd, de5.net, ccwu.cc) with Anycast DNS via dashboard or REST API.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# DNSHE Free Domains & Anycast DNS

> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection.

DNSHE ([dnshe.com](https://www.dnshe.com)) provides free subdomains under `us.ci`, `cc.cd`, `de5.net`, and `ccwu.cc` backed by enterprise Anycast DNS. It supports A, AAAA, CNAME, MX, TXT, NS, SRV, and CAA records, a 180-day renewal window, and a REST API for full automation — no credit card required.

---

## Getting Started

### 1. Register an Account
Go to [dnshe.com](https://www.dnshe.com) and sign up. No credit card needed.

### 2. Claim a Subdomain
Search for your desired prefix (e.g., `myproject`) and pair it with a suffix:

| Suffix | Use Case |
|---|---|
| `*.us.ci` | CI/CD pipelines, API endpoints, SaaS |
| `*.cc.cd` | Portfolios, creative projects |
| `*.de5.net` | Tech blogs, dev environments, docs |
| `*.ccwu.cc` | Personal pages, community projects |

### 3. Add DNS Records
From the dashboard, add your records (A, CNAME, TXT, etc.). Propagation happens in seconds via Anycast.

---

## REST API Reference

All API interactions require an API token obtained from the DNSHE dashboard under account settings.

### Authentication
All requests use a Bearer token in the `Authorization` header:
```
Authorization: Bearer $DNSHE_API_TOKEN
```

Store your token as an environment variable:
```bash
export DNSHE_API_TOKEN="your_token_here"
export DNSHE_BASE_URL="https://www.dnshe.com/api/v1"
```

---

## Key API Operations

### List Your Domains
```bash
curl -s -X GET "$DNSHE_BASE_URL/domains" \
  -H "Authorization: Bearer $DNSHE_API_TOKEN" \
  -H "Content-Type: application/json"
```

### Register a Subdomain
```bash
curl -s -X POST "$DNSHE_BASE_URL/domains" \
  -H "Authorization: Bearer $DNSHE_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "subdomain": "myproject",
    "suffix": "us.ci"
  }'
```

### Add a DNS Record
```bash
curl -s -X POST "$DNSHE_BASE_URL/domains/myproject.us.ci/records" \
  -H "Authorization: Bearer $DNSHE_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "A",
    "name": "@",
    "value": "203.0.113.42",
    "ttl": 300
  }'
```

### Update a DNS Record
```bash
curl -s -X PUT "$DNSHE_BASE_URL/domains/myproject.us.ci/records/{record_id}" \
  -H "Authorization: Bearer $DNSHE_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "A",
    "name": "@",
    "value": "203.0.113.99",
    "ttl": 300
  }'
```

### Delete a DNS Record
```bash
curl -s -X DELETE "$DNSHE_BASE_URL/domains/myproject.us.ci/records/{record_id}" \
  -H "Authorization: Bearer $DNSHE_API_TOKEN"
```

### Renew a Domain
```bash
curl -s -X POST "$DNSHE_BASE_URL/domains/myproject.us.ci/renew" \
  -H "Authorization: Bearer $DNSHE_API_TOKEN"
```

---

## Code Examples

### Python: Full Domain Setup Script
```python
import os
import requests

API_TOKEN = os.environ["DNSHE_API_TOKEN"]
BASE_URL = "https://www.dnshe.com/api/v1"

HEADERS = {
    "Authorization": f"Bearer {API_TOKEN}",
    "Content-Type": "application/json",
}

def register_subdomain(subdomain: str, suffix: str) -> dict:
    resp = requests.post(
        f"{BASE_URL}/domains",
        headers=HEADERS,
        json={"subdomain": subdomain, "suffix": suffix},
    )
    resp.raise_for_status()
    return resp.json()

def add_record(domain: str, record_type: str, name: str, value: str, ttl: int = 300) -> dict:
    resp = requests.post(
        f"{BASE_URL}/domains/{domain}/records",
        headers=HEADERS,
        json={"type": record_type, "name": name, "value": value, "ttl": ttl},
    )
    resp.raise_for_status()
    return resp.json()

def renew_domain(domain: str) -> dict:
    resp = requests.post(
        f"{BASE_URL}/domains/{domain}/renew",
        headers=HEADERS,
    )
    resp.raise_for_status()
    return resp.json()

def list_domains() -> list:
    resp = requests.get(f"{BASE_URL}/domains", headers=HEADERS)
    resp.raise_for_status()
    return resp.json()

if __name__ == "__main__":
    # Register subdomain
    result = register_subdomain("myproject", "us.ci")
    print("Registered:", result)

    # Point it to a server
    record = add_record("myproject.us.ci", "A", "@", "203.0.113.42")
    print("Record added:", record)

    # Add a www CNAME
    cname = add_record("myproject.us.ci", "CNAME", "www", "myproject.us.ci")
    print("CNAME added:", cname)
```

### Python: Automated Renewal Script (Cron-friendly)
```python
import os
import requests
from datetime import datetime, timedelta

API_TOKEN = os.environ["DNSHE_API_TOKEN"]
BASE_URL = "https://www.dnshe.com/api/v1"
HEADERS = {"Authorization": f"Bearer {API_TOKEN}"}

def renew_expiring_domains(days_threshold: int = 30):
    """Renew any domain expiring within `days_threshold` days."""
    resp = requests.get(f"{BASE_URL}/domains", headers=HEADERS)
    resp.raise_for_status()
    domains = resp.json()

    now = datetime.utcnow()
    threshold = now + timedelta(days=days_threshold)

    for domain in domains:
        # Adjust field name to match actual API response
        expires_at = datetime.fromisoformat(domain.get("expires_at", "").replace("Z", ""))
        if expires_at <= threshold:
            name = domain["domain"]
            renew_resp = requests.post(f"{BASE_URL}/domains/{name}/renew", headers=HEADERS)
            if renew_resp.ok:
                print(f"✅ Renewed: {name}")
            else:
                print(f"❌ Failed to renew {name}: {renew_resp.text}")

if __name__ == "__main__":
    renew_expiring_domains(days_threshold=30)
```

### JavaScript/Node.js: Domain Management Client
```javascript
const fetch = require('node-fetch'); // or use built-in fetch in Node 18+

const API_TOKEN = process.env.DNSHE_API_TOKEN;
const BASE_URL = 'https://www.dnshe.com/api/v1';

const headers = {
  'Authorization': `Bearer ${API_TOKEN}`,
  'Content-Type': 'application/json',
};

async function registerSubdomain(subdomain, suffix) {
  const res = await fetch(`${BASE_URL}/domains`, {
    method: 'POST',
    headers,
    body: JSON.stringify({ subdomain, suffix }),
  });
  if (!res.ok) throw new Error(`Register failed: ${await res.text()}`);
  return res.json();
}

async function addRecord(domain, type, name, value, ttl = 300) {
  const res = await fetch(`${BASE_URL}/domains/${domain}/records`, {
    method: 'POST',
    headers,
    body: JSON.stringify({ type, name, value, ttl }),
  });
  if (!res.ok) throw new Error(`Add record failed: ${await res.text()}`);
  return res.json();
}

async function listDomains() {
  const res = await fetch(`${BASE_URL}/domains`, { headers });
  if (!res.ok) throw new Error(`List failed: ${await res.text()}`);
  return res.json();
}

async function renewDomain(domain) {
  const res = await fetch(`${BASE_URL}/domains/${domain}/renew`, {
    method: 'POST',
    headers,
  });
  if (!res.ok) throw new Error(`Renew failed: ${await res.text()}`);
  return res.json();
}

// Example usage
(async () => {
  const domain = await registerSubdomain('myapp', 'cc.cd');
  console.log('Registered:', domain);

  const record = await addRecord('myapp.cc.cd', 'A', '@', '203.0.113.42');
  console.log('A record added:', record);

  // Add TXT for domain verification / Let's Encrypt
  const txt = await addRecord('myapp.cc.cd', 'TXT', '_acme-challenge', 'your-challenge-value');
  console.log('TXT record added:', txt);
})();
```

### GitHub Actions: Auto-Renewal Workflow
```yaml
# .github/workflows/dnshe-renew.yml
name: DNSHE Domain Auto-Renewal

on:
  schedule:
    - cron: '0 9 * * 1'  # Every Monday at 9am UTC
  workflow_dispatch:

jobs:
  renew:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.12'

      - name: Install dependencies
        run: pip install requests

      - name: Run renewal script
        env:
          DNSHE_API_TOKEN: ${{ secrets.DNSHE_API_TOKEN }}
        run: python scripts/renew_domains.py
```

### Bash: Quick Record Update (Dynamic DNS)
```bash
#!/bin/bash
# update-dns.sh — Update A record to current public IP

DOMAIN="${DNSHE_DOMAIN:-myproject.us.ci}"
RECORD_ID="${DNSHE_RECORD_ID}"  # Get from dashboard or API list
PUBLIC_IP=$(curl -s https://api.ipify.org)

echo "Updating $DOMAIN to $PUBLIC_IP"

curl -s -X PUT "https://www.dnshe.com/api/v1/domains/${DOMAIN}/records/${RECORD_ID}" \
  -H "Authorization: Bearer $DNSHE_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"type\": \"A\", \"name\": \"@\", \"value\": \"${PUBLIC_IP}\", \"ttl\": 60}"
```

---

## Common Record Patterns

### Static Website (A record)
```json
{ "type": "A", "name": "@", "value": "YOUR_SERVER_IP", "ttl": 300 }
```

### Subdomain Alias (CNAME)
```json
{ "type": "CNAME", "name": "www", "value": "myproject.us.ci", "ttl": 300 }
```

### Email (MX record)
```json
{ "type": "MX", "name": "@", "value": "mail.example.com", "ttl": 300, "priority": 10 }
```

### SSL Verification (TXT for Let's Encrypt DNS-01)
```json
{ "type": "TXT", "name": "_acme-challenge", "value": "ACME_CHALLENGE_TOKEN", "ttl": 60 }
```

### IPv6 (AAAA record)
```json
{ "type": "AAAA", "name": "@", "value": "2001:db8::1", "ttl": 300 }
```

### Service Discovery (SRV)
```json
{ "type": "SRV", "name": "_http._tcp", "value": "10 20 80 myproject.us.ci", "ttl": 300 }
```

---

## Supported Record Types

| Type | Purpose |
|---|---|
| `A` | IPv4 address |
| `AAAA` | IPv6 address |
| `CNAME` | Canonical name alias |
| `MX` | Mail exchange |
| `TXT` | Text (SPF, DKIM, ACME) |
| `NS` | Name server delegation |
| `SRV` | Service locator |
| `CAA` | Certificate authority authorization |

---

## Renewal Policy

- **Window**: 180 days before expiry — renew any time within this window.
- **Automation**: Use the `/renew` API endpoint in a weekly cron job to never miss a renewal.
- **Best practice**: Renew at 60–90 days before expiry to leave buffer time.

---

## Troubleshooting

### Domain not resolving
- Check propagation: DNS changes typically propagate in seconds globally via Anycast, but ISP caches can take up to 5 minutes.
- Verify your record was saved: call `GET /domains/{domain}/records` to confirm.
- Use `dig myproject.us.ci` or `nslookup myproject.us.ci` to test resolution.

### API returning 401
- Ensure `DNSHE_API_TOKEN` is set correctly.
- Token may be expired — regenerate in the dashboard.

### API returning 409 Conflict
- Subdomain is already taken. Try a different prefix.

### API returning 429 Too Many Requests
- You've hit rate limits. Add exponential backoff in your automation scripts.

### Record update not reflecting
- TTL caching: lower the TTL to 60 before making changes, then raise it again after.

---

## Compliance & Abuse

DNSHE has a zero-tolerance policy for illegal use:
- **Prohibited**: Phishing, fraud, malware, illegal content.
- **ToS**: [dnshe.com/tos.html](https://www.dnshe.com/tos.html)
- **Report Abuse**: [dnshe.com/domainabuse/](https://www.dnshe.com/domainabuse/)
- **Security contact**: abuse@dnshe.com

---

## Support & Links

| Resource | URL |
|---|---|
| Dashboard | [dnshe.com](https://www.dnshe.com) |
| Support Email | support@dnshe.com |
| ToS | [dnshe.com/tos.html](https://www.dnshe.com/tos.html) |
| Abuse Reports | [dnshe.com/domainabuse/](https://www.dnshe.com/domainabuse/) |

Related Skills

```markdown

22
from Aradotso/trending-skills

---

zeroboot-vm-sandbox

22
from Aradotso/trending-skills

Sub-millisecond VM sandboxes for AI agents using copy-on-write KVM forking via Zeroboot

yourvpndead-vpn-detection

22
from Aradotso/trending-skills

Android app that detects VPN/proxy servers (VLESS/xray/sing-box) via local SOCKS5 vulnerability, exposing exit IPs and server configs without root

xata-postgres-platform

22
from Aradotso/trending-skills

Expert skill for Xata open-source cloud-native Postgres platform with copy-on-write branching, scale-to-zero, and Kubernetes deployment

x-mentor-skill-nuwa

22
from Aradotso/trending-skills

AI-powered X (Twitter) content strategy skill that distills methodologies from 6 top creators + open-source algorithm data into actionable writing, growth, and monetization guidance.

wx-favorites-report

22
from Aradotso/trending-skills

End-to-end pipeline to extract, decrypt, and visualize WeChat Mac favorites from encrypted SQLite DB into an interactive HTML report.

wterm-web-terminal

22
from Aradotso/trending-skills

Web terminal emulator with Zig/WASM core, DOM rendering, and React/vanilla JS bindings

worldmonitor-intelligence-dashboard

22
from Aradotso/trending-skills

Real-time global intelligence dashboard with AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking

witr-process-inspector

22
from Aradotso/trending-skills

CLI and TUI tool that explains why processes, services, and ports are running by tracing causality chains across supervisors, containers, and shells.

wildworld-dataset

22
from Aradotso/trending-skills

WildWorld large-scale action-conditioned world modeling dataset with 108M+ frames from a photorealistic ARPG game, featuring per-frame annotations, 450+ actions, and explicit state information for generative world modeling research.

whatcable-macos-usb-inspector

22
from Aradotso/trending-skills

macOS menu bar app that identifies USB-C cable capabilities and charging diagnostics using IOKit

wewrite-wechat-ai-publishing

22
from Aradotso/trending-skills

Full-pipeline AI skill for WeChat Official Account articles — hotspot fetching, topic selection, writing, SEO, image generation, formatting, and draft box publishing.