# sanka-kn/gubbi architecture

> Architecture diagram of the GitHub repository sanka-kn/gubbi, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sanka-kn/gubbi
- Repository: https://github.com/sanka-kn/gubbi

## Overview

Gubbi is a Kannada font project: its FontForge SFD files hold the editable font, while the tools support glyph renaming, OpenType feature editing, and TTF generation. The user-facing workflow is to obtain and install the font; the README gives Linux and Windows installation instructions but does not describe a runtime application. The sampled tools show individual font-editing operations, not a complete orchestrated build. The graph therefore avoids asserting that these scripts form one pipeline; unsampled project capabilities are not inferred beyond the README and file tree.

Main entry points: [`Gubbi.sfd`](https://github.com/sanka-kn/gubbi/blob/master/Gubbi.sfd) (Editable font), [`tools/renamer.py`](https://github.com/sanka-kn/gubbi/blob/master/tools/renamer.py) (Glyph renamer), [`tools/apply_gsub_rules.py`](https://github.com/sanka-kn/gubbi/blob/master/tools/apply_gsub_rules.py) (GSUB applier), [`tools/generate_fonts.py`](https://github.com/sanka-kn/gubbi/blob/master/tools/generate_fonts.py) (TTF generator)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_font["Font source"]
  node_source["Editable font<br/>[Gubbi.sfd]"]
  node_original["Pre-rename font"]
  node_features["GSUB rules<br/>[gsub.fea]"]
  node_ttf["Generated font"]
end

subgraph group_tools["Font tooling"]
  node_renamer["Glyph renamer<br/>[renamer.py]"]
  node_replacements["Glyph replacements<br/>[replacements.yml]"]
  node_gsub["GSUB applier"]
  node_featuregen["Feature exporter"]
  node_glyphlist["Glyph listing"]
  node_fontgen["TTF generator<br/>[generate_fonts.py]"]
end

subgraph group_use["Font use"]
end

node_designer(("Font maintainer"))
node_user(("Font user"))

node_designer -->|"runs"| node_renamer
node_renamer -->|"loads"| node_replacements
node_renamer -->|"copies and opens"| node_original
node_renamer -->|"renames and saves"| node_source
node_designer -->|"runs"| node_gsub
node_gsub -->|"updates"| node_source
node_gsub -->|"merges"| node_features
node_designer -->|"runs"| node_featuregen
node_featuregen -->|"opens"| node_source
node_designer -->|"runs"| node_glyphlist
node_glyphlist -->|"reads glyphs"| node_source
node_designer -->|"runs"| node_fontgen
node_fontgen -->|"opens"| node_source
node_fontgen -->|"generates"| node_ttf
node_user -->|"downloads and installs"| node_ttf

click node_source "https://github.com/sanka-kn/gubbi/blob/master/Gubbi.sfd"
click node_original "https://github.com/sanka-kn/gubbi/blob/master/Gubbi_before_rename.sfd"
click node_features "https://github.com/sanka-kn/gubbi/blob/master/tools/gsub.fea"
click node_renamer "https://github.com/sanka-kn/gubbi/blob/master/tools/renamer.py"
click node_replacements "https://github.com/sanka-kn/gubbi/blob/master/tools/replacements.yml"
click node_gsub "https://github.com/sanka-kn/gubbi/blob/master/tools/apply_gsub_rules.py"
click node_featuregen "https://github.com/sanka-kn/gubbi/blob/master/tools/generate_featurefile.py"
click node_glyphlist "https://github.com/sanka-kn/gubbi/blob/master/tools/generate_rename_glyph_list.py"
click node_fontgen "https://github.com/sanka-kn/gubbi/blob/master/tools/generate_fonts.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_source,node_original,node_features,node_ttf,node_user toneBlue
class node_renamer,node_replacements,node_gsub,node_featuregen,node_glyphlist,node_fontgen toneAmber
class node_designer toneIndigo
```

## Components

### Font source

- [Editable font](https://github.com/sanka-kn/gubbi/blob/master/Gubbi.sfd): `Gubbi.sfd`
- [Pre-rename font](https://github.com/sanka-kn/gubbi/blob/master/Gubbi_before_rename.sfd): `Gubbi_before_rename.sfd`
- [GSUB rules](https://github.com/sanka-kn/gubbi/blob/master/tools/gsub.fea): `tools/gsub.fea`
- **Generated font**

### Font tooling

- [Glyph renamer](https://github.com/sanka-kn/gubbi/blob/master/tools/renamer.py): `tools/renamer.py`
- [Glyph replacements](https://github.com/sanka-kn/gubbi/blob/master/tools/replacements.yml): `tools/replacements.yml`
- [GSUB applier](https://github.com/sanka-kn/gubbi/blob/master/tools/apply_gsub_rules.py): `tools/apply_gsub_rules.py`
- [Feature exporter](https://github.com/sanka-kn/gubbi/blob/master/tools/generate_featurefile.py): `tools/generate_featurefile.py`
- [Glyph listing](https://github.com/sanka-kn/gubbi/blob/master/tools/generate_rename_glyph_list.py): `tools/generate_rename_glyph_list.py`
- [TTF generator](https://github.com/sanka-kn/gubbi/blob/master/tools/generate_fonts.py): `tools/generate_fonts.py`

### Other components

- **Font maintainer**
- **Font user**

## Connections

- Font maintainer → Glyph renamer: runs (evidence: `tools/renamer.py`)
- Glyph renamer → Glyph replacements: loads (evidence: `tools/renamer.py`)
- Glyph renamer → Pre-rename font: copies and opens (evidence: `tools/renamer.py`)
- Glyph renamer → Editable font: renames and saves (evidence: `tools/renamer.py`)
- Font maintainer → GSUB applier: runs (evidence: `tools/apply_gsub_rules.py`)
- GSUB applier → Editable font: updates (evidence: `tools/apply_gsub_rules.py`)
- GSUB applier → GSUB rules: merges (evidence: `tools/apply_gsub_rules.py`)
- Font maintainer → Feature exporter: runs (evidence: `tools/generate_featurefile.py`)
- Feature exporter → Editable font: opens (evidence: `tools/generate_featurefile.py`)
- Font maintainer → Glyph listing: runs (evidence: `tools/generate_rename_glyph_list.py`)
- Glyph listing → Editable font: reads glyphs (evidence: `tools/generate_rename_glyph_list.py`)
- Font maintainer → TTF generator: runs (evidence: `tools/generate_fonts.py`)
- TTF generator → Editable font: opens (evidence: `tools/generate_fonts.py`)
- TTF generator → Generated font: generates (evidence: `tools/generate_fonts.py`)
- Font user → Generated font: downloads and installs (evidence: `README`)
