{
  "name": "cihai",
  "url": "https://cihai.git-pull.com",
  "description": "Python library for CJK (Chinese, Japanese, Korean) character data. Look up readings, definitions, and variants from the UNIHAN dataset and beyond.",
  "sourceRepository": "https://github.com/cihai/cihai/",
  "agentEntrypoints": {
    "manifest": "/docs.json",
    "llms": "/llms.txt",
    "llmsFull": "/llms-full.txt"
  },
  "pages": [
    {
      "title": "Config",
      "description": "Use this module when you need to expand cihai configuration dictionaries before passing them to cihai.core.Cihai. Most users only need cihai.config.expand_config() indirectly through the applicatio...",
      "section": "Documentation",
      "url": "/api/config/",
      "markdownUrl": "/api/config.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Config"
        },
        {
          "id": "cihai.config.expand_config",
          "level": 2,
          "text": "expand_config()"
        }
      ]
    },
    {
      "title": "Constants",
      "description": "These values define cihai’s default directories, filenames, and baseline configuration. Start with cihai.constants.DEFAULT_CONFIG when you need to see what cihai uses without a config file.",
      "section": "Documentation",
      "url": "/api/constants/",
      "markdownUrl": "/api/constants.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Constants"
        },
        {
          "id": "cihai.constants.app_dirs",
          "level": 2,
          "text": "app_dirs"
        },
        {
          "id": "cihai.constants.DEFAULT_CONFIG",
          "level": 2,
          "text": "DEFAULT_CONFIG"
        },
        {
          "id": "cihai.constants.UNIHAN_CONFIG",
          "level": 2,
          "text": "UNIHAN_CONFIG"
        }
      ]
    },
    {
      "title": "Conversion",
      "description": "cihai.conversion translates between Python strings and legacy CJK encodings. Reach for functions such as cihai.conversion.python_to_ucn() and cihai.conversion.ucn_to_unicode() when you need exact e...",
      "section": "Documentation",
      "url": "/api/conversion/",
      "markdownUrl": "/api/conversion.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Conversion"
        },
        {
          "id": "cihai.conversion.hexd",
          "level": 2,
          "text": "hexd()"
        },
        {
          "id": "cihai.conversion.kuten_to_gb2312",
          "level": 2,
          "text": "kuten_to_gb2312()"
        },
        {
          "id": "cihai.conversion.gb2312_to_euc",
          "level": 2,
          "text": "gb2312_to_euc()"
        },
        {
          "id": "cihai.conversion.euc_to_python",
          "level": 2,
          "text": "euc_to_python()"
        },
        {
          "id": "cihai.conversion.euc_to_utf8",
          "level": 2,
          "text": "euc_to_utf8()"
        },
        {
          "id": "cihai.conversion.ucn_to_unicode",
          "level": 2,
          "text": "ucn_to_unicode()"
        },
        {
          "id": "cihai.conversion.euc_to_unicode",
          "level": 2,
          "text": "euc_to_unicode()"
        },
        {
          "id": "cihai.conversion.python_to_ucn",
          "level": 2,
          "text": "python_to_ucn()"
        },
        {
          "id": "cihai.conversion.python_to_euc",
          "level": 2,
          "text": "python_to_euc()"
        },
        {
          "id": "cihai.conversion.ucnstring_to_unicode",
          "level": 2,
          "text": "ucnstring_to_unicode()"
        },
        {
          "id": "cihai.conversion.ucnstring_to_python",
          "level": 2,
          "text": "ucnstring_to_python()"
        },
        {
          "id": "cihai.conversion.parse_var",
          "level": 2,
          "text": "parse_var()"
        },
        {
          "id": "cihai.conversion.parse_vars",
          "level": 2,
          "text": "parse_vars()"
        },
        {
          "id": "cihai.conversion.parse_untagged",
          "level": 2,
          "text": "parse_untagged()"
        }
      ]
    },
    {
      "title": "Core",
      "description": "cihai.core.Cihai is the application object that owns configuration, database access, and datasets. Most code creates one instance, runs cihai.core.Cihai.bootstrap() when needed, then queries the at...",
      "section": "Documentation",
      "url": "/api/core/",
      "markdownUrl": "/api/core.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Core"
        },
        {
          "id": "cihai.core.CihaiConfigError",
          "level": 2,
          "text": "CihaiConfigError"
        },
        {
          "id": "cihai.core.CihaiConfigError.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "cihai.core.is_valid_config",
          "level": 2,
          "text": "is_valid_config()"
        },
        {
          "id": "cihai.core.Cihai",
          "level": 2,
          "text": "Cihai"
        },
        {
          "id": "cihai.core.Cihai.default_config",
          "level": 3,
          "text": "default_config"
        },
        {
          "id": "cihai.core.Cihai.unihan",
          "level": 3,
          "text": "unihan"
        },
        {
          "id": "cihai.core.Cihai.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "cihai.core.Cihai.config",
          "level": 3,
          "text": "config"
        },
        {
          "id": "cihai.core.Cihai.sql",
          "level": 3,
          "text": "sql"
        },
        {
          "id": "cihai.core.Cihai.bootstrap",
          "level": 3,
          "text": "bootstrap()"
        },
        {
          "id": "cihai.core.Cihai.add_dataset",
          "level": 3,
          "text": "add_dataset()"
        },
        {
          "id": "cihai.core.Cihai.from_file",
          "level": 3,
          "text": "from_file()"
        }
      ]
    },
    {
      "title": "Database",
      "description": "cihai.db.Database wraps the SQLAlchemy engine, metadata, and session that datasets share. Use it directly only when you need raw database access instead of dataset helpers.",
      "section": "Documentation",
      "url": "/api/db/",
      "markdownUrl": "/api/db.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Database"
        },
        {
          "id": "cihai.db.Database",
          "level": 2,
          "text": "Database"
        },
        {
          "id": "cihai.db.Database.base",
          "level": 3,
          "text": "base"
        },
        {
          "id": "cihai.db.Database.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "cihai.db.Database.engine",
          "level": 3,
          "text": "engine"
        },
        {
          "id": "cihai.db.Database.metadata",
          "level": 3,
          "text": "metadata"
        },
        {
          "id": "cihai.db.Database.session",
          "level": 3,
          "text": "session"
        },
        {
          "id": "cihai.db.Database.reflect_db",
          "level": 3,
          "text": "reflect_db()"
        }
      ]
    },
    {
      "title": "Exceptions",
      "description": "When using cihai via Python, catch project-specific failures through this module. All Cihai-specific exceptions inherit from CihaiException. Configuration validation on cihai.core.Cihai raises ciha...",
      "section": "Documentation",
      "url": "/api/exc/",
      "markdownUrl": "/api/exc.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Exceptions"
        },
        {
          "id": "cihai.exc.CihaiException",
          "level": 2,
          "text": "CihaiException"
        },
        {
          "id": "cihai.exc.ImportStringError",
          "level": 2,
          "text": "ImportStringError"
        },
        {
          "id": "cihai.exc.ImportStringError.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "cihai.exc.ImportStringError.import_name",
          "level": 3,
          "text": "import_name"
        },
        {
          "id": "cihai.exc.ImportStringError.exception",
          "level": 3,
          "text": "exception"
        }
      ]
    },
    {
      "title": "Extending",
      "description": "Extension classes let advanced users add datasets or dataset-specific behavior to cihai.core.Cihai. Start with cihai.extend.Dataset; use cihai.extend.DatasetPlugin when the behavior belongs under a...",
      "section": "Documentation",
      "url": "/api/extend/",
      "markdownUrl": "/api/extend.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Extending"
        },
        {
          "id": "cihai.extend.ConfigMixin",
          "level": 2,
          "text": "ConfigMixin"
        },
        {
          "id": "cihai.extend.SQLAlchemyMixin",
          "level": 2,
          "text": "SQLAlchemyMixin"
        },
        {
          "id": "cihai.extend.SQLAlchemyMixin.sql",
          "level": 3,
          "text": "sql"
        },
        {
          "id": "cihai.extend.SQLAlchemyMixin.engine",
          "level": 3,
          "text": "engine"
        },
        {
          "id": "cihai.extend.SQLAlchemyMixin.metadata",
          "level": 3,
          "text": "metadata"
        },
        {
          "id": "cihai.extend.SQLAlchemyMixin.session",
          "level": 3,
          "text": "session"
        },
        {
          "id": "cihai.extend.SQLAlchemyMixin.base",
          "level": 3,
          "text": "base"
        },
        {
          "id": "cihai.extend.Dataset",
          "level": 2,
          "text": "Dataset"
        },
        {
          "id": "cihai.extend.Dataset.bootstrap",
          "level": 3,
          "text": "bootstrap()"
        },
        {
          "id": "cihai.extend.Dataset.add_plugin",
          "level": 3,
          "text": "add_plugin()"
        },
        {
          "id": "cihai.extend.DatasetPlugin",
          "level": 2,
          "text": "DatasetPlugin"
        }
      ]
    },
    {
      "title": "API Reference",
      "description": "cihai’s public API for CJK character lookups and dataset management.",
      "section": "Documentation",
      "url": "/api/",
      "markdownUrl": "/api/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "API Reference"
        },
        {
          "id": "core",
          "level": 2,
          "text": "Core"
        },
        {
          "id": "supporting-modules",
          "level": 2,
          "text": "Supporting Modules"
        }
      ]
    },
    {
      "title": "Logging",
      "description": "Logging helpers format cihai’s command-line output. Library users normally configure logging in their application and leave cihai.log.LogFormatter and cihai.log.DebugLogFormatter to the CLI layer.",
      "section": "Documentation",
      "url": "/api/log/",
      "markdownUrl": "/api/log.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Logging"
        },
        {
          "id": "cihai-log",
          "level": 2,
          "text": "cihai.log"
        },
        {
          "id": "cihai.log.LogFormatter",
          "level": 2,
          "text": "LogFormatter"
        },
        {
          "id": "cihai.log.LogFormatter.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "cihai.log.LogFormatter.format",
          "level": 3,
          "text": "format()"
        },
        {
          "id": "cihai.log.LogFormatter.template",
          "level": 3,
          "text": "template()"
        },
        {
          "id": "cihai.log.DebugLogFormatter",
          "level": 2,
          "text": "DebugLogFormatter"
        },
        {
          "id": "cihai.log.DebugLogFormatter.template",
          "level": 3,
          "text": "template()"
        }
      ]
    },
    {
      "title": "Typings",
      "description": "These typed dictionaries describe cihai’s public configuration shape. They are useful when annotating code that builds or validates a cihai.types.ConfigDict.",
      "section": "Documentation",
      "url": "/api/types/",
      "markdownUrl": "/api/types.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Typings"
        },
        {
          "id": "cihai.types.RawPluginConfigDict",
          "level": 2,
          "text": "RawPluginConfigDict"
        },
        {
          "id": "cihai.types.RawDirsConfigDict",
          "level": 2,
          "text": "RawDirsConfigDict"
        },
        {
          "id": "cihai.types.RawDirsConfigDict.cache",
          "level": 3,
          "text": "cache"
        },
        {
          "id": "cihai.types.RawDirsConfigDict.log",
          "level": 3,
          "text": "log"
        },
        {
          "id": "cihai.types.RawDirsConfigDict.data",
          "level": 3,
          "text": "data"
        },
        {
          "id": "cihai.types.DirsConfigDict",
          "level": 2,
          "text": "DirsConfigDict"
        },
        {
          "id": "cihai.types.DirsConfigDict.cache",
          "level": 3,
          "text": "cache"
        },
        {
          "id": "cihai.types.DirsConfigDict.log",
          "level": 3,
          "text": "log"
        },
        {
          "id": "cihai.types.DirsConfigDict.data",
          "level": 3,
          "text": "data"
        },
        {
          "id": "cihai.types.RawDatabaseConfigDict",
          "level": 2,
          "text": "RawDatabaseConfigDict"
        },
        {
          "id": "cihai.types.RawDatabaseConfigDict.url",
          "level": 3,
          "text": "url"
        },
        {
          "id": "cihai.types.RawConfigDict",
          "level": 2,
          "text": "RawConfigDict"
        },
        {
          "id": "cihai.types.RawConfigDict.plugins",
          "level": 3,
          "text": "plugins"
        },
        {
          "id": "cihai.types.RawConfigDict.datasets",
          "level": 3,
          "text": "datasets"
        },
        {
          "id": "cihai.types.RawConfigDict.database",
          "level": 3,
          "text": "database"
        },
        {
          "id": "cihai.types.RawConfigDict.dirs",
          "level": 3,
          "text": "dirs"
        },
        {
          "id": "cihai.types.RawConfigDict.debug",
          "level": 3,
          "text": "debug"
        },
        {
          "id": "cihai.types.ConfigDict",
          "level": 2,
          "text": "ConfigDict"
        },
        {
          "id": "cihai.types.ConfigDict.plugins",
          "level": 3,
          "text": "plugins"
        },
        {
          "id": "cihai.types.ConfigDict.datasets",
          "level": 3,
          "text": "datasets"
        },
        {
          "id": "cihai.types.ConfigDict.database",
          "level": 3,
          "text": "database"
        },
        {
          "id": "cihai.types.ConfigDict.dirs",
          "level": 3,
          "text": "dirs"
        },
        {
          "id": "cihai.types.ConfigDict.debug",
          "level": 3,
          "text": "debug"
        }
      ]
    },
    {
      "title": "Utilities",
      "description": "Utility helpers cover small behaviors shared across cihai internals. The most common advanced entry point is cihai.utils.import_string(), which resolves configured import paths into Python objects.",
      "section": "Documentation",
      "url": "/api/utils/",
      "markdownUrl": "/api/utils.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Utilities"
        },
        {
          "id": "cihai.utils.supports_wide",
          "level": 2,
          "text": "supports_wide()"
        },
        {
          "id": "cihai.utils.import_string",
          "level": 2,
          "text": "import_string()"
        }
      ]
    },
    {
      "title": "Datasets",
      "description": "Data sources available through cihai.",
      "section": "Documentation",
      "url": "/datasets/",
      "markdownUrl": "/datasets/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Datasets"
        },
        {
          "id": "planned-datasets",
          "level": 2,
          "text": "Planned datasets"
        }
      ]
    },
    {
      "title": "UNIHAN Dataset",
      "description": "The UNIHAN dataset gives a cihai.core.Cihai application its default character lookup data: definitions, readings, variants, and related fields loaded through unihan-etl:index.",
      "section": "Documentation",
      "url": "/datasets/unihan/",
      "markdownUrl": "/datasets/unihan.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "UNIHAN Dataset"
        },
        {
          "id": "module-cihai.data.unihan.bootstrap",
          "level": 2,
          "text": "Bootstrapping"
        },
        {
          "id": "cihai.data.unihan.bootstrap.bootstrap_unihan",
          "level": 3,
          "text": "bootstrap_unihan()"
        },
        {
          "id": "cihai.data.unihan.bootstrap.is_bootstrapped",
          "level": 3,
          "text": "is_bootstrapped()"
        },
        {
          "id": "cihai.data.unihan.bootstrap.create_unihan_table",
          "level": 3,
          "text": "create_unihan_table()"
        },
        {
          "id": "cihai.data.unihan.dataset.Unihan",
          "level": 3,
          "text": "Unihan"
        },
        {
          "id": "cihai.data.unihan.dataset.Unihan.char",
          "level": 4,
          "text": "char"
        },
        {
          "id": "cihai.data.unihan.dataset.Unihan.kDefinition",
          "level": 4,
          "text": "kDefinition"
        },
        {
          "id": "cihai.data.unihan.dataset.Unihan.kTraditionalVariant",
          "level": 4,
          "text": "kTraditionalVariant"
        },
        {
          "id": "cihai.data.unihan.dataset.Unihan.kSimplifiedVariant",
          "level": 4,
          "text": "kSimplifiedVariant"
        },
        {
          "id": "cihai.data.unihan.dataset.Unihan.tagged_vars",
          "level": 4,
          "text": "tagged_vars"
        },
        {
          "id": "cihai.data.unihan.dataset.Unihan.untagged_vars",
          "level": 4,
          "text": "untagged_vars"
        },
        {
          "id": "cihai.data.unihan.dataset.Unihan.bootstrap",
          "level": 4,
          "text": "bootstrap()"
        },
        {
          "id": "cihai.data.unihan.dataset.Unihan.lookup_char",
          "level": 4,
          "text": "lookup_char()"
        },
        {
          "id": "cihai.data.unihan.dataset.Unihan.reverse_char",
          "level": 4,
          "text": "reverse_char()"
        },
        {
          "id": "cihai.data.unihan.dataset.Unihan.with_fields",
          "level": 4,
          "text": "with_fields()"
        },
        {
          "id": "cihai.data.unihan.dataset.Unihan.is_bootstrapped",
          "level": 4,
          "text": "is_bootstrapped"
        },
        {
          "id": "cihai.data.unihan.dataset.Unihan.add_plugin",
          "level": 4,
          "text": "add_plugin()"
        },
        {
          "id": "cihai.data.unihan.dataset.Unihan.sql",
          "level": 4,
          "text": "sql"
        },
        {
          "id": "cihai.data.unihan.dataset.Unihan.engine",
          "level": 4,
          "text": "engine"
        },
        {
          "id": "cihai.data.unihan.dataset.Unihan.metadata",
          "level": 4,
          "text": "metadata"
        },
        {
          "id": "cihai.data.unihan.dataset.Unihan.session",
          "level": 4,
          "text": "session"
        },
        {
          "id": "cihai.data.unihan.dataset.Unihan.base",
          "level": 4,
          "text": "base"
        },
        {
          "id": "cihai.data.unihan.constants.UNIHAN_FIELDS",
          "level": 3,
          "text": "UNIHAN_FIELDS"
        },
        {
          "id": "cihai.data.unihan.constants.UNIHAN_ETL_DEFAULT_OPTIONS",
          "level": 3,
          "text": "UNIHAN_ETL_DEFAULT_OPTIONS"
        },
        {
          "id": "variants-plugin",
          "level": 2,
          "text": "Variants plugin"
        },
        {
          "id": "cihai.data.unihan.dataset.UnihanVariants",
          "level": 3,
          "text": "UnihanVariants"
        },
        {
          "id": "cihai.data.unihan.dataset.UnihanVariants.bootstrap",
          "level": 4,
          "text": "bootstrap()"
        },
        {
          "id": "cihai.data.unihan.dataset.UnihanVariants.sql",
          "level": 4,
          "text": "sql"
        },
        {
          "id": "cihai.data.unihan.dataset.UnihanVariants.engine",
          "level": 4,
          "text": "engine"
        },
        {
          "id": "cihai.data.unihan.dataset.UnihanVariants.metadata",
          "level": 4,
          "text": "metadata"
        },
        {
          "id": "cihai.data.unihan.dataset.UnihanVariants.session",
          "level": 4,
          "text": "session"
        },
        {
          "id": "cihai.data.unihan.dataset.UnihanVariants.base",
          "level": 4,
          "text": "base"
        }
      ]
    },
    {
      "title": "Extending",
      "description": "Written Late 2013",
      "section": "Documentation",
      "url": "/design-and-planning/2013/extending/",
      "markdownUrl": "/design-and-planning/2013/extending.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Extending"
        },
        {
          "id": "minimum-usage",
          "level": 2,
          "text": "Minimum usage"
        },
        {
          "id": "code",
          "level": 3,
          "text": "Code"
        },
        {
          "id": "growing-big",
          "level": 2,
          "text": "Growing big"
        },
        {
          "id": "importing-data-into-database",
          "level": 3,
          "text": "Importing data into database"
        },
        {
          "id": "deeper",
          "level": 3,
          "text": "Deeper"
        }
      ]
    },
    {
      "title": "Information Liberation",
      "description": "Written Late 2013",
      "section": "Documentation",
      "url": "/design-and-planning/2013/information_liberation/",
      "markdownUrl": "/design-and-planning/2013/information_liberation.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Information Liberation"
        },
        {
          "id": "permissive-licensing-your-dataset",
          "level": 2,
          "text": "Permissive-licensing your dataset"
        },
        {
          "id": "case-study-ipython",
          "level": 3,
          "text": "Case study: IPython"
        },
        {
          "id": "conclusion",
          "level": 2,
          "text": "Conclusion"
        }
      ]
    },
    {
      "title": "Internal Design decisions",
      "description": "Whether you are Cihai, python, creating a CJK tool in another programming language, or simple looking to use a dataset, cihai will provide tools to turn raw datasets into a familiar table / relatio...",
      "section": "Documentation",
      "url": "/design-and-planning/2013/internals/",
      "markdownUrl": "/design-and-planning/2013/internals.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Internal Design decisions"
        },
        {
          "id": "convenient-relational-cohesive-output-of-datasets",
          "level": 2,
          "text": "Convenient relational, cohesive output of datasets"
        },
        {
          "id": "bootstrapping",
          "level": 2,
          "text": "Bootstrapping"
        }
      ]
    },
    {
      "title": "Planning",
      "description": "Written Late 2013",
      "section": "Documentation",
      "url": "/design-and-planning/2013/spec/",
      "markdownUrl": "/design-and-planning/2013/spec.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Planning"
        },
        {
          "id": "configuration",
          "level": 2,
          "text": "Configuration"
        },
        {
          "id": "history-of-cjk-libraries",
          "level": 2,
          "text": "History of CJK libraries"
        },
        {
          "id": "unihan",
          "level": 3,
          "text": "Unihan"
        },
        {
          "id": "cjklib",
          "level": 3,
          "text": "cjklib"
        },
        {
          "id": "cihai",
          "level": 3,
          "text": "Cihai"
        },
        {
          "id": "current",
          "level": 3,
          "text": "Current"
        },
        {
          "id": "external-api",
          "level": 2,
          "text": "External API"
        },
        {
          "id": "cihai-spec",
          "level": 3,
          "text": "Cihai Spec"
        },
        {
          "id": "licensing",
          "level": 2,
          "text": "Licensing"
        },
        {
          "id": "core-software",
          "level": 3,
          "text": "Core software"
        },
        {
          "id": "extensions-contrib-licensing",
          "level": 3,
          "text": "Extensions / Contrib licensing"
        },
        {
          "id": "data-sets",
          "level": 3,
          "text": "Data sets"
        },
        {
          "id": "how-should-data-be-looked-up",
          "level": 2,
          "text": "How should data be looked up?"
        },
        {
          "id": "chinese-character",
          "level": 3,
          "text": "Chinese character"
        },
        {
          "id": "string-of-chinese-characters",
          "level": 3,
          "text": "String of Chinese Characters"
        },
        {
          "id": "how-should-data-returned-look-schema",
          "level": 2,
          "text": "How should data returned look? Schema."
        },
        {
          "id": "extension-philosophy",
          "level": 2,
          "text": "Extension philosophy"
        },
        {
          "id": "accessing-extensions-directly",
          "level": 2,
          "text": "Accessing extensions directly?"
        },
        {
          "id": "api-examples",
          "level": 2,
          "text": "API examples"
        },
        {
          "id": "creating-a-cihai-plugin",
          "level": 2,
          "text": "Creating a cihai plugin"
        }
      ]
    },
    {
      "title": "Internals Planning",
      "description": "Created 2017-04-29",
      "section": "Documentation",
      "url": "/design-and-planning/2017/spec/",
      "markdownUrl": "/design-and-planning/2017/spec.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Internals Planning"
        },
        {
          "id": "zero-config",
          "level": 2,
          "text": "Zero config"
        },
        {
          "id": "incremental-configuration",
          "level": 2,
          "text": "Incremental configuration"
        },
        {
          "id": "relational-backend",
          "level": 2,
          "text": "Relational backend"
        },
        {
          "id": "automatic-extension-detection",
          "level": 2,
          "text": "Automatic extension detection"
        },
        {
          "id": "unihan-core",
          "level": 2,
          "text": "UNIHAN core"
        },
        {
          "id": "operation",
          "level": 3,
          "text": "Operation"
        },
        {
          "id": "data-normalization",
          "level": 2,
          "text": "Data normalization"
        },
        {
          "id": "standards",
          "level": 3,
          "text": "Standards"
        },
        {
          "id": "data-liberation",
          "level": 2,
          "text": "Data liberation"
        }
      ]
    },
    {
      "title": "Extensions",
      "description": "Initially discussed in #131 1",
      "section": "Documentation",
      "url": "/design-and-planning/2018/plugin-system/",
      "markdownUrl": "/design-and-planning/2018/plugin-system.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Extensions"
        },
        {
          "id": "benefits",
          "level": 1,
          "text": "Benefits"
        },
        {
          "id": "versioning",
          "level": 1,
          "text": "Versioning"
        },
        {
          "id": "extending-datasets",
          "level": 1,
          "text": "Extending datasets"
        },
        {
          "id": "todo",
          "level": 1,
          "text": "Todo"
        },
        {
          "id": "history",
          "level": 1,
          "text": "History"
        },
        {
          "id": "idea-pip-based-add-dataset-add-extension",
          "level": 1,
          "text": "Idea: pip-based add_dataset/add_extension"
        },
        {
          "id": "idea-namespacing",
          "level": 1,
          "text": "Idea: Namespacing"
        },
        {
          "id": "see-also",
          "level": 1,
          "text": "See Also"
        }
      ]
    },
    {
      "title": "Design and Planning",
      "description": "Extensions",
      "section": "Documentation",
      "url": "/design-and-planning/",
      "markdownUrl": "/design-and-planning/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Design and Planning"
        },
        {
          "id": "id2",
          "level": 2,
          "text": "2018"
        },
        {
          "id": "id3",
          "level": 2,
          "text": "2017"
        },
        {
          "id": "late-2013",
          "level": 2,
          "text": "Late 2013"
        },
        {
          "id": "late-2012",
          "level": 2,
          "text": "Late 2012"
        }
      ]
    },
    {
      "title": "Glossary",
      "description": "In computer software, internationalization of Chinese, Japanese, and Korean language.",
      "section": "Documentation",
      "url": "/glossary/",
      "markdownUrl": "/glossary.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Glossary"
        }
      ]
    },
    {
      "title": "Changelog",
      "description": "You can test the unpublished version of cihai before it’s released. See developmental releases.",
      "section": "Documentation",
      "url": "/history/",
      "markdownUrl": "/history.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Changelog"
        },
        {
          "id": "cihai-0-39-x-unreleased",
          "level": 2,
          "text": "cihai 0.39.x (unreleased)"
        },
        {
          "id": "fixes",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "extension-guide-example-prints-its-lookups-404",
          "level": 4,
          "text": "Extension guide example prints its lookups (#404)"
        },
        {
          "id": "documentation",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "documentation-links-point-readers-to-the-right-apis-401",
          "level": 4,
          "text": "Documentation links point readers to the right APIs (#401)"
        },
        {
          "id": "development",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "ci-actions-updated-to-current-majors",
          "level": 4,
          "text": "CI actions updated to current majors"
        },
        {
          "id": "configuration-fields-describe-themselves-in-the-api-reference-403",
          "level": 4,
          "text": "Configuration fields describe themselves in the API reference (#403)"
        },
        {
          "id": "minimum-ruff-0-16-0-was-unpinned-404",
          "level": 4,
          "text": "Minimum ruff>=0.16.0 (was unpinned) (#404)"
        },
        {
          "id": "linting-builds-on-ruff-s-default-rule-set-404",
          "level": 4,
          "text": "Linting builds on ruff’s default rule set (#404)"
        },
        {
          "id": "cihai-0-38-0-2026-06-28",
          "level": 2,
          "text": "cihai 0.38.0 (2026-06-28)"
        },
        {
          "id": "breaking-changes",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "minimum-unihan-etl-0-43-0-was-0-42-0",
          "level": 4,
          "text": "Minimum unihan-etl>=0.43.0 (was >=0.42.0)"
        },
        {
          "id": "cihai-0-37-0-2026-06-28",
          "level": 2,
          "text": "cihai 0.37.0 (2026-06-28)"
        },
        {
          "id": "id1",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "minimum-unihan-etl-0-42-0-was-0-39-1-393",
          "level": 4,
          "text": "Minimum unihan-etl>=0.42.0 (was >=0.39.1) (#393)"
        },
        {
          "id": "what-s-new",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "documentation-reorganized-around-everyday-library-tasks-394",
          "level": 4,
          "text": "Documentation reorganized around everyday library tasks (#394)"
        },
        {
          "id": "smoother-docs-frontend-for-repeated-navigation-392",
          "level": 4,
          "text": "Smoother docs frontend for repeated navigation (#392)"
        },
        {
          "id": "api-reference-gets-structured-autodoc-presentation-396",
          "level": 4,
          "text": "API reference gets structured autodoc presentation (#396)"
        },
        {
          "id": "id2",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "sphinx-warning-cleanup-for-public-docs-and-api-docstrings-397",
          "level": 4,
          "text": "Sphinx warning cleanup for public docs and API docstrings (#397)"
        },
        {
          "id": "id3",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "shared-gp-sphinx-platform-replaces-local-docs-plumbing-395",
          "level": 4,
          "text": "Shared gp-sphinx platform replaces local docs plumbing (#395)"
        },
        {
          "id": "gp-sphinx-docs-stack-refreshed-through-0-0-1a17-398-399",
          "level": 4,
          "text": "gp-sphinx docs stack refreshed through 0.0.1a17 (#398, #399)"
        },
        {
          "id": "cihai-0-36-1-2026-01-24",
          "level": 2,
          "text": "cihai 0.36.1 (2026-01-24)"
        },
        {
          "id": "id4",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "minimum-unihan-etl-0-39-1-was-0-38-0-389",
          "level": 4,
          "text": "Minimum unihan-etl>=0.39.1 (was >=0.38.0) (#389)"
        },
        {
          "id": "id5",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "makefile-tasks-moved-to-just-388",
          "level": 4,
          "text": "Makefile tasks moved to just (#388)"
        },
        {
          "id": "pypi-and-docs-publishing-use-identity-based-credentials-387",
          "level": 4,
          "text": "PyPI and docs publishing use identity-based credentials (#387)"
        },
        {
          "id": "cihai-0-36-0-2025-11-01",
          "level": 2,
          "text": "cihai 0.36.0 (2025-11-01)"
        },
        {
          "id": "id6",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "python-3-10-is-now-the-minimum-386",
          "level": 4,
          "text": "Python 3.10 is now the minimum (#386)"
        },
        {
          "id": "minimum-unihan-etl-0-38-0-was-0-37-0",
          "level": 4,
          "text": "Minimum unihan-etl>=0.38.0 (was >=0.37.0)"
        },
        {
          "id": "id7",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "python-3-14-added-to-the-test-matrix-385",
          "level": 4,
          "text": "Python 3.14 added to the test matrix (#385)"
        },
        {
          "id": "deferred-annotations-adopted-across-the-codebase-383",
          "level": 4,
          "text": "Deferred annotations adopted across the codebase (#383)"
        },
        {
          "id": "cihai-0-35-0-2024-12-21",
          "level": 2,
          "text": "cihai 0.35.0 (2024-12-21)"
        },
        {
          "id": "id8",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "python-3-9-is-now-the-minimum-382",
          "level": 4,
          "text": "Python 3.9 is now the minimum (#382)"
        },
        {
          "id": "minimum-unihan-etl-0-37-0-382",
          "level": 4,
          "text": "Minimum unihan-etl>=0.37.0 (#382)"
        },
        {
          "id": "id9",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "ruff-applied-broad-automated-cleanup-382",
          "level": 4,
          "text": "Ruff applied broad automated cleanup (#382)"
        },
        {
          "id": "cihai-0-34-0-2024-11-26",
          "level": 2,
          "text": "cihai 0.34.0 (2024-11-26)"
        },
        {
          "id": "id10",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "project-management-moved-from-poetry-to-uv-380",
          "level": 4,
          "text": "Project management moved from Poetry to uv (#380)"
        },
        {
          "id": "build-backend-moved-from-poetry-to-hatchling-380",
          "level": 4,
          "text": "Build backend moved from Poetry to hatchling (#380)"
        },
        {
          "id": "id11",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "unihan-revision-37-data-cleanup",
          "level": 4,
          "text": "UNIHAN Revision 37 data cleanup"
        },
        {
          "id": "ruff-f-string-cleanup-371",
          "level": 4,
          "text": "Ruff f-string cleanup (#371)"
        },
        {
          "id": "cihai-0-33-0-2024-04-06",
          "level": 2,
          "text": "cihai 0.33.0 (2024-04-06)"
        },
        {
          "id": "id12",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "id13",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "ruff-automated-cleanup-369",
          "level": 4,
          "text": "Ruff automated cleanup (#369)"
        },
        {
          "id": "cihai-0-32-0-2024-04-01",
          "level": 2,
          "text": "cihai 0.32.0 (2024-04-01)"
        },
        {
          "id": "id14",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "cihai-0-31-0-2024-02-09",
          "level": 2,
          "text": "cihai 0.31.0 (2024-02-09)"
        },
        {
          "id": "id15",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "unihan-compatibility-updated-to-15-1-0-366",
          "level": 4,
          "text": "UNIHAN compatibility updated to 15.1.0 (#366)"
        },
        {
          "id": "id16",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "api-reference-split-into-multiple-pages-363",
          "level": 4,
          "text": "API reference split into multiple pages (#363)"
        },
        {
          "id": "id17",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "ruff-lint-coverage-strengthened-367",
          "level": 4,
          "text": "Ruff lint coverage strengthened (#367)"
        },
        {
          "id": "cihai-0-30-0-2023-12-09",
          "level": 2,
          "text": "cihai 0.30.0 (2023-12-09)"
        },
        {
          "id": "id18",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "id19",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "id20",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "cihai-0-29-0-2023-11-19",
          "level": 2,
          "text": "cihai 0.29.0 (2023-11-19)"
        },
        {
          "id": "packaging",
          "level": 3,
          "text": "Packaging"
        },
        {
          "id": "id21",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "cihai-0-28-0-2023-07-22",
          "level": 2,
          "text": "cihai 0.28.0 (2023-07-22)"
        },
        {
          "id": "cihai-0-27-0-2023-07-18",
          "level": 2,
          "text": "cihai 0.27.0 (2023-07-18)"
        },
        {
          "id": "id22",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "id23",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "cihai-0-26-0-2023-07-01",
          "level": 2,
          "text": "cihai 0.26.0 (2023-07-01)"
        },
        {
          "id": "cihai-0-25-0-2023-06-24",
          "level": 2,
          "text": "cihai 0.25.0 (2023-06-24)"
        },
        {
          "id": "cihai-0-24-0-2023-06-24",
          "level": 2,
          "text": "cihai 0.24.0 (2023-06-24)"
        },
        {
          "id": "cihai-0-23-0-2023-06-19",
          "level": 2,
          "text": "cihai 0.23.0 (2023-06-19)"
        },
        {
          "id": "cihai-0-22-1-2023-06-18",
          "level": 2,
          "text": "cihai 0.22.1 (2023-06-18)"
        },
        {
          "id": "cihai-0-22-0-2023-06-18",
          "level": 2,
          "text": "cihai 0.22.0 (2023-06-18)"
        },
        {
          "id": "cihai-0-21-0-2023-06-03",
          "level": 2,
          "text": "cihai 0.21.0 (2023-06-03)"
        },
        {
          "id": "id24",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "sqlalchemy-2-0-is-now-required-340",
          "level": 4,
          "text": "SQLAlchemy 2.0 is now required (#340)"
        },
        {
          "id": "id25",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "cihai-0-20-0-2023-05-29",
          "level": 2,
          "text": "cihai 0.20.0 (2023-05-29)"
        },
        {
          "id": "id26",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "python-3-7-support-removed-343",
          "level": 4,
          "text": "Python 3.7 support removed (#343)"
        },
        {
          "id": "id27",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "strict-mypy-typing-adopted-324",
          "level": 4,
          "text": "Strict mypy typing adopted (#324)"
        },
        {
          "id": "cihai-0-19-0-2023-05-28",
          "level": 2,
          "text": "cihai 0.19.0 (2023-05-28)"
        },
        {
          "id": "id28",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "cihai-0-18-3-2023-05-13",
          "level": 2,
          "text": "cihai 0.18.3 (2023-05-13)"
        },
        {
          "id": "cihai-0-18-2-2022-10-02",
          "level": 2,
          "text": "cihai 0.18.2 (2022-10-02)"
        },
        {
          "id": "cihai-0-18-1-2022-10-01",
          "level": 2,
          "text": "cihai 0.18.1 (2022-10-01)"
        },
        {
          "id": "cihai-0-18-0-2022-10-01",
          "level": 2,
          "text": "cihai 0.18.0 (2022-10-01)"
        },
        {
          "id": "id29",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "cihai-0-17-1-2022-10-01",
          "level": 2,
          "text": "cihai 0.17.1 (2022-10-01)"
        },
        {
          "id": "cihai-0-17-0-2022-09-11",
          "level": 2,
          "text": "cihai 0.17.0 (2022-09-11)"
        },
        {
          "id": "id30",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "id31",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "cihai-0-16-0-2022-08-21",
          "level": 2,
          "text": "cihai 0.16.0 (2022-08-21)"
        },
        {
          "id": "cihai-0-15-0-2022-08-20",
          "level": 2,
          "text": "cihai 0.15.0 (2022-08-20)"
        },
        {
          "id": "id32",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "cihai-0-14-1-2022-08-20",
          "level": 2,
          "text": "cihai 0.14.1 (2022-08-20)"
        },
        {
          "id": "cihai-0-14-0-2022-08-20",
          "level": 2,
          "text": "cihai 0.14.0 (2022-08-20)"
        },
        {
          "id": "id33",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "cihai-0-13-0-2022-08-16",
          "level": 2,
          "text": "cihai 0.13.0 (2022-08-16)"
        },
        {
          "id": "compatibility",
          "level": 3,
          "text": "Compatibility"
        },
        {
          "id": "id34",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "id35",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "cihai-0-12-0-2021-06-16",
          "level": 2,
          "text": "cihai 0.12.0 (2021-06-16)"
        },
        {
          "id": "cihai-0-11-1-2021-06-15",
          "level": 2,
          "text": "cihai 0.11.1 (2021-06-15)"
        },
        {
          "id": "cihai-0-11-0-2021-06-15",
          "level": 2,
          "text": "cihai 0.11.0 (2021-06-15)"
        },
        {
          "id": "cihai-0-10-0-2020-08-09",
          "level": 2,
          "text": "cihai 0.10.0 (2020-08-09)"
        },
        {
          "id": "id36",
          "level": 3,
          "text": "Packaging"
        },
        {
          "id": "documentation-and-ci",
          "level": 3,
          "text": "Documentation and CI"
        },
        {
          "id": "cihai-0-9-0p1-2019-08-18",
          "level": 2,
          "text": "cihai 0.9.0p1 (2019-08-18)"
        },
        {
          "id": "cihai-0-9-0p0-2019-08-18",
          "level": 2,
          "text": "cihai 0.9.0p0 (2019-08-18)"
        },
        {
          "id": "cihai-0-9-0-2019-08-18",
          "level": 2,
          "text": "cihai 0.9.0 (2019-08-18)"
        },
        {
          "id": "cihai-0-9-0a4-2019-08-17",
          "level": 2,
          "text": "cihai 0.9.0a4 (2019-08-17)"
        },
        {
          "id": "cihai-0-9-0a-2018-09-07",
          "level": 2,
          "text": "cihai 0.9.0a (2018-09-07)"
        },
        {
          "id": "id37",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "id38",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "cihai-0-8-1-2018-07-21",
          "level": 2,
          "text": "cihai 0.8.1 (2018-07-21)"
        },
        {
          "id": "cihai-0-8-0-2018-06-23",
          "level": 2,
          "text": "cihai 0.8.0 (2018-06-23)"
        },
        {
          "id": "id39",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "documentation-and-licensing",
          "level": 3,
          "text": "Documentation and licensing"
        },
        {
          "id": "cihai-0-7-4-2017-05-26",
          "level": 2,
          "text": "cihai 0.7.4 (2017-05-26)"
        },
        {
          "id": "cihai-0-7-3-2017-05-20",
          "level": 2,
          "text": "cihai 0.7.3 (2017-05-20)"
        },
        {
          "id": "cihai-0-7-2-2017-05-20",
          "level": 2,
          "text": "cihai 0.7.2 (2017-05-20)"
        },
        {
          "id": "cihai-0-7-1-2017-05-20",
          "level": 2,
          "text": "cihai 0.7.1 (2017-05-20)"
        },
        {
          "id": "cihai-0-7-0-2017-05-20",
          "level": 2,
          "text": "cihai 0.7.0 (2017-05-20)"
        },
        {
          "id": "cihai-0-6-1-2017-05-17",
          "level": 2,
          "text": "cihai 0.6.1 (2017-05-17)"
        },
        {
          "id": "cihai-0-6-0-2017-05-17",
          "level": 2,
          "text": "cihai 0.6.0 (2017-05-17)"
        },
        {
          "id": "cihai-0-5-1-2017-05-17",
          "level": 2,
          "text": "cihai 0.5.1 (2017-05-17)"
        },
        {
          "id": "cihai-0-5-0-2017-05-17",
          "level": 2,
          "text": "cihai 0.5.0 (2017-05-17)"
        },
        {
          "id": "cihai-0-4-2-2017-05-16",
          "level": 2,
          "text": "cihai 0.4.2 (2017-05-16)"
        },
        {
          "id": "cihai-0-4-1-2017-05-16",
          "level": 2,
          "text": "cihai 0.4.1 (2017-05-16)"
        },
        {
          "id": "cihai-0-4-0-2017-05-16",
          "level": 2,
          "text": "cihai 0.4.0 (2017-05-16)"
        },
        {
          "id": "id40",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "id41",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "cihai-0-3-0-2017-04-16",
          "level": 2,
          "text": "cihai 0.3.0 (2017-04-16)"
        },
        {
          "id": "id42",
          "level": 3,
          "text": "What’s new"
        }
      ]
    },
    {
      "title": "Configure Storage",
      "description": "Use cihai.core.Cihai.from_file() when configuration belongs in a JSON or YAML file instead of inline Python. This example keeps UNIHAN disabled so the config-loading path is fast and does not downl...",
      "section": "Documentation",
      "url": "/how-to/configuration/",
      "markdownUrl": "/how-to/configuration.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Configure Storage"
        }
      ]
    },
    {
      "title": "How-to",
      "description": "Task-oriented guides for the work you do after installing cihai.",
      "section": "Documentation",
      "url": "/how-to/",
      "markdownUrl": "/how-to/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "How-to"
        }
      ]
    },
    {
      "title": "cihai",
      "description": "Python library for CJK (Chinese, Japanese, Korean) character data. Look up readings, definitions, and variants from the UNIHAN dataset and beyond.",
      "section": "",
      "url": "/",
      "markdownUrl": "/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "cihai"
        },
        {
          "id": "install",
          "level": 2,
          "text": "Install"
        },
        {
          "id": "at-a-glance",
          "level": 2,
          "text": "At a glance"
        }
      ]
    },
    {
      "title": "Config Reader",
      "description": "cihai._internal.config_reader.ConfigReader loads and dumps raw YAML or JSON configuration data before the public configuration layer expands it. This is an internal API with no compatibility guaran...",
      "section": "Documentation",
      "url": "/internals/api/config_reader/",
      "markdownUrl": "/internals/api/config_reader.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Config Reader"
        },
        {
          "id": "cihai._internal.config_reader.ConfigfmtNotImplementedError",
          "level": 2,
          "text": "ConfigfmtNotImplementedError"
        },
        {
          "id": "cihai._internal.config_reader.ConfigfmtNotImplementedError.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "cihai._internal.config_reader.ConfigExtensionNotImplementedError",
          "level": 2,
          "text": "ConfigExtensionNotImplementedError"
        },
        {
          "id": "cihai._internal.config_reader.ConfigExtensionNotImplementedError.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "cihai._internal.config_reader.ConfigReader",
          "level": 2,
          "text": "ConfigReader"
        },
        {
          "id": "cihai._internal.config_reader.ConfigReader.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "cihai._internal.config_reader.ConfigReader._load",
          "level": 3,
          "text": "_load()"
        },
        {
          "id": "cihai._internal.config_reader.ConfigReader.load",
          "level": 3,
          "text": "load()"
        },
        {
          "id": "cihai._internal.config_reader.ConfigReader._from_file",
          "level": 3,
          "text": "_from_file()"
        },
        {
          "id": "cihai._internal.config_reader.ConfigReader.from_file",
          "level": 3,
          "text": "from_file()"
        },
        {
          "id": "cihai._internal.config_reader.ConfigReader._dump",
          "level": 3,
          "text": "_dump()"
        },
        {
          "id": "cihai._internal.config_reader.ConfigReader.dump",
          "level": 3,
          "text": "dump()"
        }
      ]
    },
    {
      "title": "Internal API",
      "description": "These references document cihai internals for maintainers. Use the public API pages unless you are debugging configuration loading or contributing changes to cihai itself.",
      "section": "Documentation",
      "url": "/internals/api/",
      "markdownUrl": "/internals/api/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Internal API"
        }
      ]
    },
    {
      "title": "Typings",
      "description": "Internal type aliases support configuration loading and expansion. Prefer the public types in cihai.types unless you are working on cihai internals.",
      "section": "Documentation",
      "url": "/internals/api/types/",
      "markdownUrl": "/internals/api/types.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Typings"
        },
        {
          "id": "cihai._internal.types.StrPath",
          "level": 2,
          "text": "StrPath"
        },
        {
          "id": "cihai._internal.types.StrOrBytesPath",
          "level": 2,
          "text": "StrOrBytesPath"
        }
      ]
    },
    {
      "title": "Internals",
      "description": "Internal configuration file loading and expansion.",
      "section": "Documentation",
      "url": "/internals/",
      "markdownUrl": "/internals/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Internals"
        }
      ]
    },
    {
      "title": "Code Style",
      "description": "This page’s content now lives in two places: docstring and prose conventions moved to .github/WRITING.md, and formatting, linting, type-checking, and import conventions moved to .github/CONTRIBUTIN...",
      "section": "Documentation",
      "url": "/project/code-style/",
      "markdownUrl": "/project/code-style.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Code Style"
        }
      ]
    },
    {
      "title": "Contributing",
      "description": "Environment setup, the gates, tests, documentation builds, and the release process live in .github/CONTRIBUTING.md at the repository root. Prose and commit conventions are in .github/WRITING.md.",
      "section": "Documentation",
      "url": "/project/contributing/",
      "markdownUrl": "/project/contributing.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Contributing"
        }
      ]
    },
    {
      "title": "Project",
      "description": "Information for contributors and maintainers.",
      "section": "Documentation",
      "url": "/project/",
      "markdownUrl": "/project/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Project"
        }
      ]
    },
    {
      "title": "Releasing",
      "description": "Since cihai is used in production projects, breaking changes are deferred until a major feature release.",
      "section": "Documentation",
      "url": "/project/releasing/",
      "markdownUrl": "/project/releasing.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Releasing"
        },
        {
          "id": "version-numbering",
          "level": 2,
          "text": "Version numbering"
        },
        {
          "id": "release-checklist",
          "level": 2,
          "text": "Release checklist"
        },
        {
          "id": "automated-deployment",
          "level": 2,
          "text": "Automated deployment"
        },
        {
          "id": "manual-deployment",
          "level": 2,
          "text": "Manual deployment"
        }
      ]
    },
    {
      "title": "Quickstart",
      "description": "cihai is designed to work out-of-the-box without configuration.",
      "section": "Documentation",
      "url": "/quickstart/",
      "markdownUrl": "/quickstart.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Quickstart"
        },
        {
          "id": "installation",
          "level": 2,
          "text": "Installation"
        },
        {
          "id": "first-lookup",
          "level": 2,
          "text": "First lookup"
        },
        {
          "id": "developmental-releases",
          "level": 3,
          "text": "Developmental releases"
        },
        {
          "id": "configuration",
          "level": 2,
          "text": "Configuration"
        },
        {
          "id": "advanced-config",
          "level": 3,
          "text": "Advanced Config"
        }
      ]
    },
    {
      "title": "Examples",
      "description": "examples/basic_usage.py:",
      "section": "Documentation",
      "url": "/topics/examples/",
      "markdownUrl": "/topics/examples.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Examples"
        },
        {
          "id": "basic-usage",
          "level": 2,
          "text": "Basic usage"
        },
        {
          "id": "character-variants",
          "level": 2,
          "text": "Character variants"
        }
      ]
    },
    {
      "title": "Extending cihai",
      "description": "Use cihai’s abstraction and your dataset’s users can receive easy configuration, SQLAlchemy access, and be available in a growing list of CJKV information.",
      "section": "Documentation",
      "url": "/topics/extending/",
      "markdownUrl": "/topics/extending.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Extending cihai"
        },
        {
          "id": "creating-new-dataset",
          "level": 2,
          "text": "Creating new dataset"
        },
        {
          "id": "plugins-adding-features-to-a-dataset",
          "level": 2,
          "text": "Plugins: Adding features to a dataset"
        },
        {
          "id": "combining-datasets",
          "level": 2,
          "text": "Combining datasets"
        }
      ]
    },
    {
      "title": "Features",
      "description": "Handling CJK variants",
      "section": "Documentation",
      "url": "/topics/features/",
      "markdownUrl": "/topics/features.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Features"
        }
      ]
    },
    {
      "title": "Topics",
      "description": "Explore cihai’s capabilities and underlying concepts at a high level, with detailed explanations to help you understand its design and usage.",
      "section": "Documentation",
      "url": "/topics/",
      "markdownUrl": "/topics/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Topics"
        }
      ]
    },
    {
      "title": "Troubleshooting",
      "description": "Note, to get this working on python 2.7, you must have python built with UCS4 via --enable-unicode=ucs4. You can test for UCS4 with:",
      "section": "Documentation",
      "url": "/topics/troubleshooting/",
      "markdownUrl": "/topics/troubleshooting.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Troubleshooting"
        },
        {
          "id": "python-2-7-and-ucs",
          "level": 2,
          "text": "Python 2.7 and UCS"
        }
      ]
    }
  ]
}
