Nope! First, let’s see what we have in haolib.You are probably right, if you do not have time for exploring the haolib features, you can simply install haolib and begin building!
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.
If you decided to stay, let’s get back to the project structure. So each leaf is just a separate Python module (e.g. haolib -> Batches -> SQLAlchemy stands for the haolib.batches.sqlalchemy module).
You can follow the links in the map to see the details of each feature.
Also, it is useful to keep in mind which Python frameworks and libraries haolib integrates with
See? Not that many things to keep in mind! Now, let’s finally go through the installation guide!
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"haolib","colors":{"primary":"#00CC8B","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/haovc/0wE8Yr8kVpcifXqh/logo/light.svg?fit=max\u0026auto=format\u0026n=0wE8Yr8kVpcifXqh\u0026q=85\u0026s=ab331eb38826d2275ee0f1bfa81b1292","dark":"https://mintcdn.com/haovc/0wE8Yr8kVpcifXqh/logo/dark.svg?fit=max\u0026auto=format\u0026n=0wE8Yr8kVpcifXqh\u0026q=85\u0026s=d6a25aab715c9680da37ca664d199ba0"},"favicon":"/favicon.svg","appearance":{},"background":{"decoration":"windows","color":{"light":"#FAFAFA","dark":"#0A0A0A"}},"navbar":{"links":[],"primary":{"type":"github","href":"https://github.com/hao-vc/haolib"}},"footer":{"socials":{"website":"https://hao.vc","github":"https://github.com/hao-vc/haolib","telegram":"https://t.me/hao_vc"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"]},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"haovc","hasAudioNarration":false,"actualSubdomain":"haovc","customDomains":["lib.hao.vc"],"gitSource":{"type":"github","owner":"hao-vc","repo":"haolib","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a21e908a8fc07c2afd3cfff","collectionId":"0eabe8ab-d95e-4b19-8f61-9c3a951b2145","schemaVersion":"v2"},"entitlements":{},"buildId":"6a21e908a8fc07c2afd3cfff:success","clientVersion":"0.0.4043","searchFilterCounts":[{"language":"default","tag":"Configs","count":9},{"language":"default","tag":"Models","count":7},{"language":"default","tag":"Base Entities","count":6},{"language":"default","tag":"Entrypoints","count":6},{"language":"default","tag":"Batches","count":5},{"language":"default","tag":"Getting Started","count":5},{"language":"default","tag":"Endpoint Examples","count":4},{"language":"default","tag":"Database","count":3},{"language":"default","tag":"Specification","count":3},{"language":"default","tag":"Transactions","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"essentials/projectmap","slug":"/essentials/projectmap","pageMetadata":{"title":"Project Map","description":"A map of the haolib project","icon":"map","href":"/essentials/projectmap"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"A map of the haolib project\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const Dialogue=({dialogue})=>{if(!dialogue||!Array.isArray(dialogue)||dialogue.length===0){return null}return _jsx(`div`,{style:{margin:`2rem 0`},children:dialogue.map((message,index)=>{const isWriter=message.role===`writer`||message.role===`assistant`;const messageText=message.text||message.content||``;return _jsx(`div`,{style:{display:`flex`,justifyContent:isWriter?`flex-end`:`flex-start`,marginBottom:`2rem`,padding:`1rem`},children:_jsxs(`div`,{style:{maxWidth:`75%`,display:`flex`,flexDirection:isWriter?`row-reverse`:`row`,alignItems:`flex-start`,gap:`1rem`},children:[_jsx(`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},children:isWriter?`🐱`:`👤`}),_jsxs(`div`,{style:{flex:1},children:[_jsx(`div`,{style:{fontSize:`0.75rem`,fontWeight:`600`,textTransform:`uppercase`,letterSpacing:`1px`,marginBottom:`0.5rem`,color:isWriter?`#00CC8B`:`#07C983`,textAlign:isWriter?`right`:`left`},children:isWriter?`HAO`:`You`}),_jsx(`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`},children:messageText})]})]})},index)})})};function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,..._provideComponents(),...props.components},{Heading,Mermaid,Note,Warning,_MdxComponentBoundary}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Warning)_missingMdxReference(`Warning`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`still-no-installation-guide`,children:`Still, no installation guide?`}),`\n`,_jsx(_components.p,{children:`Nope! First, let’s see what we have in haolib.`}),`\n`,_jsx(Mermaid,{chart:` graph LR;\n A[haolib] --> B[Batches]\n B --> B1[Abstract]\n B --> B2[Batch]\n B --> B3[Mapped]\n B --> B4[SQLAlchemy]\n\n A[haolib] --> C[Configs]\n C --> C1[Base]\n C --> C2[CORS]\n C --> C3[Idempotency]\n C --> C4[JWT]\n C --> C5[Observability]\n C --> C6[Redis]\n C --> C7[Server]\n C --> C8[SQLAlchemy]\n\n A[haolib] --> D[Database]\n D --> D1[Models]\n D1 --> D11[Base]\n D11 --> D111[SQLAlchemy]\n D1 --> D12[Mapped]\n D12 --> D121[Abstract]\n D12 --> D122[SQLAlchemy]\n D1 --> D13[Mixins]\n D13 --> D131[SQLAlchemy]\n\n D --> D2[Specification]\n D2 --> D21[Base]\n D2 --> D22[SQLAlchemy]\n\n D --> D3[Transactions]\n D3 --> D31[Abstract]\n D3 --> D32[SQLAlchemy]\n\n A[haolib] --> E[Dependencies]\n E --> E1[Dishka]\n E1 --> E11[Redis]\n E1 --> E12[SQLAlchemy]\n\n A[haolib] --> F[Entities]\n F --> F1[Base]\n F1 --> F11[Create]\n F1 --> F12[Read]\n F1 --> F13[Update]\n F1 --> F14[Delete]\n\n A[haolib] --> G[Entrypoints]\n G --> G1[Abstract]\n G --> G2[FastAPI]\n G --> G3[FastMCP]\n G --> G4[FastStream]\n G --> G5[TaskIQ]\n\n A[haolib] --> H[Enums]\n H --> H1[Base]\n H --> H2[Filter]\n\n A[haolib] --> I[Exceptions]\n I --> I1[Base]\n I1 --> I11[Abstract]\n I1 --> I12[FastAPI]\n I --> I2[Handlers]\n I2 --> I21[FastAPI]\n I --> I3[Schema]\n I3 --> I31[FastAPI]\n\n A[haolib] --> J[Observability]\n J --> J1[Logfmt]\n J --> J2[Settuper]\n J --> J3[Utils]\n\n A[haolib] --> K[Security]\n K --> K1[Encryption]\n K1 --> K11[Abstract]\n K1 --> K12[Fernet]\n K --> K2[JWT]\n K2 --> K21[Encoders]\n K21 --> K211[Abstract]\n K21 --> K212[PyJWT]\n K --> K3[StackAuth]\n K3 --> K31[JWK]\n K31 --> K311[Abstract]\n K31 --> K312[PyJWT]\n K --> K5[Utils]\n K5 --> K52[PyJWT]\n K --> K6[FastAPI]\n K --> K4[Passwords]\n\n A[haolib] --> L[Utils]\n L --> L1[rattrs]\n L --> L2[strings]\n\n A[haolib] --> M[Web]\n M --> M1[Idempotency]\n M1 --> M11[FastAPI]\n M1 --> M12[Storages]\n M12 --> M121[Abstract]\n M12 --> M122[Redis]\n`}),`\n`,_jsx(_MdxComponentBoundary,{name:`Dialogue`,children:_jsx(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!`}]})}),`\n`,_jsx(_components.p,{children:`You are probably right, if you do not have time for exploring the haolib features, you can simply install haolib and begin building!`}),`\n`,_jsx(Warning,{children:`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.`}),`\n`,_jsxs(_components.p,{children:[`If you decided to stay, let’s get back to the project structure. So each `,_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Tree_(abstract_data_type)`,children:`leaf`}),` is just a separate Python module (e.g. haolib -> Batches -> SQLAlchemy stands for the `,_jsx(_components.code,{children:`haolib.batches.sqlalchemy`}),` module).`]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`You can follow the links in the map to see the details of each feature.`})}),`\n`,_jsx(Heading,{level:`3`,id:`now-to-be-less-specific-we’re-going-to-show-you-the-map-of-haolib-features-consider-those-as-the-use-cases-of-haolib`,children:`Now, to be less specific, we’re going to show you the map of haolib features, consider those as the use cases of haolib`}),`\n`,_jsx(Mermaid,{chart:` graph LR;\n\n A[haolib] --> B[Core]\n B --> B1[Batches]\n B --> B2[Configs]\n B --> B3[Dependencies]\n B --> B4[Entities]\n B --> B5[Entrypoints]\n B --> B6[Enums]\n B --> B7[Exceptions]\n B --> B8[Utils]\n\n A --> C[Security]\n C --> C1[Encryption]\n C --> C2[JWT]\n C --> C3[Passwords]\n C --> C4[StackAuth]\n A --> D[Observability]\n\n A --> D1[Database]\n D1 --> D11[Models]\n D1 --> D12[Specification]\n D1 --> D13[Transactions]\n\n A --> E[Web]\n E --> E1[Idempotency]`}),`\n`,_jsx(Heading,{level:`3`,id:`also-it-is-useful-to-keep-in-mind-which-python-frameworks-and-libraries-haolib-integrates-with`,children:`Also, it is useful to keep in mind which Python frameworks and libraries haolib integrates with`}),`\n`,_jsx(Mermaid,{chart:` graph LR;\n\n A[haolib] --> B[\u003ca href=\"https://dishka.readthedocs.io/en/stable/index.html\">Dishka\u003c/a>]\n A[haolib] --> C[\u003ca href=\"https://fastapi.tiangolo.com/\">FastAPI\u003c/a>]\n A[haolib] --> D[\u003ca href=\"https://faststream.ag2.ai/latest/\">FastStream\u003c/a>]\n A[haolib] --> K[\u003ca href=\"https://fastmcp.readthedocs.io/en/stable/index.html\">FastMCP\u003c/a>]\n A[haolib] --> E[\u003ca href=\"https://taskiq-python.github.io/\">TaskIQ\u003c/a>]\n A[haolib] --> F[\u003ca href=\"https://www.sqlalchemy.org/\">SQLAlchemy\u003c/a>]\n A[haolib] --> G[\u003ca href=\"https://redis.io/docs/latest/develop/clients/redis-py/\">Redis\u003c/a>]\n A[haolib] --> H[\u003ca href=\"https://pyjwt.readthedocs.io/en/stable/\">PyJWT\u003c/a>]\n A[haolib] --> I[\u003ca href=\"https://en.wikipedia.org/wiki/Bcrypt\">bcrypt\u003c/a>]\n A[haolib] --> J[\u003ca href=\"https://cryptography.io/en/latest/\">pyca/cryptography\u003c/a>]`}),`\n`,_jsx(_components.p,{children:`See? Not that many things to keep in mind! Now, let’s finally go through the installation guide!`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{Dialogue,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Project Map","description":"A map of the haolib project","icon":"map","href":"/essentials/projectmap"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[144,1876,")=>null;function _cr"]]},"mdxExtracts":{"tableOfContents":[{"title":"Still, no installation guide?","slug":"still-no-installation-guide","depth":2,"children":[{"title":"Now, to be less specific, we’re going to show you the map of haolib features, consider those as the use cases of haolib","slug":"now-to-be-less-specific-we’re-going-to-show-you-the-map-of-haolib-features-consider-those-as-the-use-cases-of-haolib","depth":3,"children":[]},{"title":"Also, it is useful to keep in mind which Python frameworks and libraries haolib integrates with","slug":"also-it-is-useful-to-keep-in-mind-which-python-frameworks-and-libraries-haolib-integrates-with","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":[],"subdomain":"haovc","siteName":"haolib","title":"Project Map - haolib","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"originalFileLocation":"essentials/projectmap.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"A map of the haolib project\">\u003cmeta data-mint-head name=\"application-name\" content=\"haolib\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/haovc/69n6zL6Pqa5awUoq/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/haovc/69n6zL6Pqa5awUoq/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/haovc/69n6zL6Pqa5awUoq/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/haovc/69n6zL6Pqa5awUoq/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/haovc/69n6zL6Pqa5awUoq/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/haovc/69n6zL6Pqa5awUoq/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/haovc/69n6zL6Pqa5awUoq/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/haovc/69n6zL6Pqa5awUoq/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/haovc/69n6zL6Pqa5awUoq/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Project Map - haolib\">\u003cmeta data-mint-head property=\"og:description\" content=\"A map of the haolib project\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"haolib\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://lib.hao.vc/essentials/projectmap\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://haovc.mintlify.app/_mintlify/api/og/v2?division=Getting+Started\u0026amp;title=Project+Map\u0026amp;description=A+map+of+the+haolib+project\u0026amp;theme=4df91545dec309206e104afa\u0026amp;signature=fc1bf8a33c13659df6b66b44661ddf88ae801bca2691e75668cb9c9dd783a1a8\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Project Map - haolib\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"A map of the haolib project\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://haovc.mintlify.app/_mintlify/api/og/v2?division=Getting+Started\u0026amp;title=Project+Map\u0026amp;description=A+map+of+the+haolib+project\u0026amp;theme=4df91545dec309206e104afa\u0026amp;signature=fc1bf8a33c13659df6b66b44661ddf88ae801bca2691e75668cb9c9dd783a1a8\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/haovc/69n6zL6Pqa5awUoq/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"haolib\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#00CC8B\">\u003clink data-mint-head rel=\"canonical\" href=\"https://lib.hao.vc/essentials/projectmap\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/essentials/projectmap.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://lib.hao.vc/#organization\",\"name\":\"haolib\",\"url\":\"https://lib.hao.vc\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/haovc/0wE8Yr8kVpcifXqh/logo/light.svg?fit=max\u0026auto=format\u0026n=0wE8Yr8kVpcifXqh\u0026q=85\u0026s=ab331eb38826d2275ee0f1bfa81b1292\"}},{\"@type\":\"WebSite\",\"@id\":\"https://lib.hao.vc#website\",\"name\":\"haolib\",\"url\":\"https://lib.hao.vc\",\"publisher\":{\"@id\":\"https://lib.hao.vc/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://lib.hao.vc/essentials/projectmap#webpage\",\"url\":\"https://lib.hao.vc/essentials/projectmap\",\"name\":\"Project Map\",\"description\":\"A map of the haolib project\",\"isPartOf\":{\"@id\":\"https://lib.hao.vc#website\"},\"breadcrumb\":{\"@id\":\"https://lib.hao.vc/essentials/projectmap#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://lib.hao.vc/essentials/projectmap#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Getting Started\",\"item\":\"https://lib.hao.vc/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Project Map\",\"item\":\"https://lib.hao.vc/essentials/projectmap\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://lib.hao.vc/essentials/projectmap#article\",\"headline\":\"Project Map\",\"name\":\"Project Map\",\"description\":\"A map of the haolib project\",\"url\":\"https://lib.hao.vc/essentials/projectmap\",\"mainEntityOfPage\":{\"@id\":\"https://lib.hao.vc/essentials/projectmap#webpage\"},\"publisher\":{\"@id\":\"https://lib.hao.vc/#organization\"},\"isPartOf\":{\"@id\":\"https://lib.hao.vc#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"haolib\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"haolib","nav":{"global":null,"products":[{"product":"READ THIS FIRST","icon":"book","description":"Read this first before you start using haolib","groups":[{"group":"Getting Started","icon":"rocket","pages":[{"title":"READ THIS NO MATTER WHAT, SERIOUSLY!!!","icon":"warning","href":""},{"title":"What is next?","description":"What am I supposed to do if I want to build an application with haolib?","icon":"question","href":"/essentials/whatisnext"},{"title":"Project Map","icon":"map","href":"/essentials/projectmap"},{"title":"Installation","description":"How to install haolib","icon":"download","href":"/essentials/installation"},{"title":"Philosophy","icon":"lightbulb","href":"/essentials/philosophy"}]}]},{"product":"Security","icon":"shield-check","description":"Authentication, JWT, encryption, and password management","pages":[{"title":"Security","href":"/security/introduction"}]},{"product":"Database","icon":"database","description":"Database models, specifications, and transactions","pages":[{"title":"Database","href":"/database/introduction"}]},{"product":"Observability","icon":"chart-line","description":"Logging, monitoring, and observability","pages":[{"title":"Observability","href":"/observability/introduction"}]},{"product":"Core","icon":"cube","description":"Core modules: batches, configs, dependencies, entities, entrypoints, enums, exceptions, and utils","pages":[{"title":"Core","href":"/batches/introduction"}]},{"product":"Web","icon":"globe","description":"Web-specific features including idempotency","pages":[{"title":"Web","href":"/web/introduction"}]},{"product":"API Reference","icon":"code","description":"API documentation and endpoint examples","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]}]},"basePath":"","title":"Project Map - haolib","buildId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","deploymentId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","dynamics":[],"chunks":[]}