# Draft: SNS Core

## Overview

Writing names to Bitcoin is permissionless, meaning no service can enforce character validation at the point of inscription. Other naming systems have struggled with complexity and disputes over valid characters. These realities, combined with the fact that SNS began as an experiment, led the early community to opt for a highly permissive character set. It has been fun but also a mess!&#x20;

## Solution: SNS Core

SNS Core defines a stricter subset of valid characters and a limit on length which will improve SNS robustness for applications like wallet resolution.&#x20;

### Core Character Set

* Letters (<mark style="color:orange;">`a-z`</mark>)
* Numbers (<mark style="color:orange;">`0-9`</mark>)
* Hyphen (<mark style="color:orange;">`-`</mark>)
* Underscore (<mark style="color:orange;">`_`</mark>)

{% hint style="info" %}
Upper or lowercase characters are both valid, but will indexed as lowercase.
{% endhint %}

### Core Name Length

* **Name:** Must be ≤ **63 characters**
* **Namespace:** Must be ≤ **63 characters**
* Combined: `name`, plus `name space` plus `.` can be up to 127 characters

{% hint style="info" %}
These constraints mirror DNS standards and prevent indexing edge cases.
{% endhint %}

{% hint style="info" %}
Note: There is no specification for subdomains in SNS yet.
{% endhint %}

## Indexing SNS Core

{% hint style="info" %}
SNS core does not make any breaking changes to indexers or invalidate any previously inscribed names. All rules in the [SNS spec](/sats-names/sns-spec.md) remain unchanged. SNS Core defines a subset of the existing names.&#x20;
{% endhint %}

### **Only Index SNS Core**

* Follow the [index spec](/sats-names/sns-spec/index-names.md)
* Add additional validation for Core characters and length restrictions
* Recommended for wallets and DNS-like applications&#x20;

### Flag SNS Core&#x20;

* Follow the [index spec](/sats-names/sns-spec/index-names.md)
* Add additional validation for Core characters and length restrictions and add a boolean flag to each name that passes.&#x20;
* Recommended for marketplaces&#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.satsnames.org/sats-names/draft-sns-core.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
