> ## Documentation Index
> Fetch the complete documentation index at: https://lib.hao.vc/llms.txt
> Use this file to discover all available pages before exploring further.

# Project Map

> A map of the haolib project

export const Dialogue = ({dialogue}) => {
  if (!dialogue || !Array.isArray(dialogue) || dialogue.length === 0) {
    return null;
  }
  return <div style={{
    margin: '2rem 0'
  }}>
            {dialogue.map((message, index) => {
    const isWriter = message.role === 'writer' || message.role === 'assistant';
    const messageText = message.text || message.content || '';
    return <div key={index} style={{
      display: 'flex',
      justifyContent: isWriter ? 'flex-end' : 'flex-start',
      marginBottom: '2rem',
      padding: '1rem'
    }}>
                        <div style={{
      maxWidth: '75%',
      display: 'flex',
      flexDirection: isWriter ? 'row-reverse' : 'row',
      alignItems: 'flex-start',
      gap: '1rem'
    }}>
                            <div style={{
      width: '50px',
      height: '50px',
      borderRadius: '50%',
      background: isWriter ? 'linear-gradient(135deg, #00CC8B 0%, #07C983 100%)' : 'linear-gradient(135deg, #07C983 0%, #00CC8B 100%)',
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center',
      fontSize: '1.5rem',
      flexShrink: 0
    }}>
                                {isWriter ? '🐱' : '👤'}
                            </div>

                            <div style={{
      flex: 1
    }}>
                                <div style={{
      fontSize: '0.75rem',
      fontWeight: '600',
      textTransform: 'uppercase',
      letterSpacing: '1px',
      marginBottom: '0.5rem',
      color: isWriter ? '#00CC8B' : '#07C983',
      textAlign: isWriter ? 'right' : 'left'
    }}>
                                    {isWriter ? 'HAO' : 'You'}
                                </div>

                                <div style={{
      background: isWriter ? 'linear-gradient(135deg, rgba(0, 204, 139, 0.2) 0%, rgba(7, 201, 131, 0.1) 100%)' : 'linear-gradient(135deg, rgba(7, 201, 131, 0.2) 0%, rgba(0, 204, 139, 0.1) 100%)',
      backdropFilter: 'blur(10px)',
      borderRadius: isWriter ? '24px 8px 24px 24px' : '8px 24px 24px 24px',
      padding: '1.5rem',
      border: isWriter ? '2px solid rgba(0, 204, 139, 0.4)' : '2px solid rgba(7, 201, 131, 0.4)',
      boxShadow: isWriter ? '0 10px 30px rgba(0, 204, 139, 0.25)' : '0 10px 30px rgba(7, 201, 131, 0.25)',
      color: '#ffffff',
      fontSize: '1rem',
      lineHeight: '1.7'
    }}>
                                    {messageText}
                                </div>
                            </div>
                        </div>
                    </div>;
  })}
        </div>;
};

## Still, no installation guide?

Nope! First, let's see what we have in haolib.

```mermaid theme={null}
    graph LR;
    A[haolib] --> B[Batches]
    B --> B1[Abstract]
    B --> B2[Batch]
    B --> B3[Mapped]
    B --> B4[SQLAlchemy]

    A[haolib] --> C[Configs]
    C --> C1[Base]
    C --> C2[CORS]
    C --> C3[Idempotency]
    C --> C4[JWT]
    C --> C5[Observability]
    C --> C6[Redis]
    C --> C7[Server]
    C --> C8[SQLAlchemy]

    A[haolib] --> D[Database]
    D --> D1[Models]
    D1 --> D11[Base]
    D11 --> D111[SQLAlchemy]
    D1 --> D12[Mapped]
    D12 --> D121[Abstract]
    D12 --> D122[SQLAlchemy]
    D1 --> D13[Mixins]
    D13 --> D131[SQLAlchemy]

    D --> D2[Specification]
    D2 --> D21[Base]
    D2 --> D22[SQLAlchemy]

    D --> D3[Transactions]
    D3 --> D31[Abstract]
    D3 --> D32[SQLAlchemy]

    A[haolib] --> E[Dependencies]
    E --> E1[Dishka]
    E1 --> E11[Redis]
    E1 --> E12[SQLAlchemy]

    A[haolib] --> F[Entities]
    F --> F1[Base]
    F1 --> F11[Create]
    F1 --> F12[Read]
    F1 --> F13[Update]
    F1 --> F14[Delete]

    A[haolib] --> G[Entrypoints]
    G --> G1[Abstract]
    G --> G2[FastAPI]
    G --> G3[FastMCP]
    G --> G4[FastStream]
    G --> G5[TaskIQ]

    A[haolib] --> H[Enums]
    H --> H1[Base]
    H --> H2[Filter]

    A[haolib] --> I[Exceptions]
    I --> I1[Base]
    I1 --> I11[Abstract]
    I1 --> I12[FastAPI]
    I --> I2[Handlers]
    I2 --> I21[FastAPI]
    I --> I3[Schema]
    I3 --> I31[FastAPI]

    A[haolib] --> J[Observability]
    J --> J1[Logfmt]
    J --> J2[Settuper]
    J --> J3[Utils]

    A[haolib] --> K[Security]
    K --> K1[Encryption]
    K1 --> K11[Abstract]
    K1 --> K12[Fernet]
    K --> K2[JWT]
    K2 --> K21[Encoders]
    K21 --> K211[Abstract]
    K21 --> K212[PyJWT]
    K --> K3[StackAuth]
    K3 --> K31[JWK]
    K31 --> K311[Abstract]
    K31 --> K312[PyJWT]
    K --> K5[Utils]
    K5 --> K52[PyJWT]
    K --> K6[FastAPI]
    K --> K4[Passwords]

    A[haolib] --> L[Utils]
    L --> L1[rattrs]
    L --> L2[strings]

    A[haolib] --> M[Web]
    M --> M1[Idempotency]
    M1 --> M11[FastAPI]
    M1 --> M12[Storages]
    M12 --> M121[Abstract]
    M12 --> M122[Redis]

```

<Dialogue
  dialogue={
[
    {
        role: 'writer',
        content: 'Wow! That\'s a lot of stuff! Why can\'t we simply install haolib and begin building already?'
    },
    {
        role: 'reader',
        content: 'The cat is right, I probably do not need to know that much to begin!'
    }
]
}
/>

You are probably right, if you do not have time for exploring the haolib features, you can simply install haolib and begin building!

<Warning>But I'd recommend you to stay on this page for a while if you are a beginner because it'd be better if you learned the basic structure of haolib first. Still, it's only a recommendation, you always can use your favourite LLM to ask questions about the haolib docs.</Warning>

If you decided to stay, let's get back to the project structure. So each [leaf](https://en.wikipedia.org/wiki/Tree_\(abstract_data_type\)) is just a separate Python module (e.g. haolib -> Batches -> SQLAlchemy stands for the `haolib.batches.sqlalchemy` module).

<Note>
  You can follow the links in the map to see the details of each feature.
</Note>

### Now, to be less specific, we're going to show you the map of haolib features, consider those as the use cases of haolib

```mermaid theme={null}
    graph LR;

    A[haolib] --> B[Core]
    B --> B1[Batches]
    B --> B2[Configs]
    B --> B3[Dependencies]
    B --> B4[Entities]
    B --> B5[Entrypoints]
    B --> B6[Enums]
    B --> B7[Exceptions]
    B --> B8[Utils]

    A --> C[Security]
    C --> C1[Encryption]
    C --> C2[JWT]
    C --> C3[Passwords]
    C --> C4[StackAuth]
    A --> D[Observability]

    A --> D1[Database]
    D1 --> D11[Models]
    D1 --> D12[Specification]
    D1 --> D13[Transactions]

    A --> E[Web]
    E --> E1[Idempotency]
```

### Also, it is useful to keep in mind which Python frameworks and libraries haolib integrates with

```mermaid theme={null}
    graph LR;

    A[haolib] --> B[<a href="https://dishka.readthedocs.io/en/stable/index.html">Dishka</a>]
    A[haolib] --> C[<a href="https://fastapi.tiangolo.com/">FastAPI</a>]
    A[haolib] --> D[<a href="https://faststream.ag2.ai/latest/">FastStream</a>]
    A[haolib] --> K[<a href="https://fastmcp.readthedocs.io/en/stable/index.html">FastMCP</a>]
    A[haolib] --> E[<a href="https://taskiq-python.github.io/">TaskIQ</a>]
    A[haolib] --> F[<a href="https://www.sqlalchemy.org/">SQLAlchemy</a>]
    A[haolib] --> G[<a href="https://redis.io/docs/latest/develop/clients/redis-py/">Redis</a>]
    A[haolib] --> H[<a href="https://pyjwt.readthedocs.io/en/stable/">PyJWT</a>]
    A[haolib] --> I[<a href="https://en.wikipedia.org/wiki/Bcrypt">bcrypt</a>]
    A[haolib] --> J[<a href="https://cryptography.io/en/latest/">pyca/cryptography</a>]
```

See? Not that many things to keep in mind! Now, let's finally go through the installation guide!
