[{"data":1,"prerenderedAt":1074},["ShallowReactive",2],{"/open_source/contribution/setting_up":3,"surround-/open_source/contribution/setting_up":1059},{"id":4,"title":5,"avatar":6,"banner":6,"body":7,"category":6,"desc":1052,"description":39,"extension":1053,"links":6,"meta":1054,"navigation":6,"path":1055,"seo":1056,"stem":1057,"__hash__":1058},"docs/en/open_source/contribution/setting_up.md","Setting Up Your Development Environment",null,{"type":8,"value":9,"toc":1049},"minimark",[10,1045],[11,12,14,19,23,93,97,100,111,114,127,131,134,160,163,175,182,193,197,200,213,216,229,234,237,241,248,307,311,314,396,400,406,426,432,449,453,456,482,489,493,505,516,535,539,548,566,569,742,908,912,987,991,1000,1023,1027],"steps",{"level":13},"4",[15,16,18],"h4",{"id":17},"fork-clone-the-repository","Fork & Clone the Repository",[20,21,22],"p",{},"Set up the repository on your local machine:",[24,25,26,30,69],"ul",{},[27,28,29],"li",{},"Fork the repository on GitHub",[27,31,32,33],{},"Clone your fork to your local machine:",[34,35,40],"pre",{"className":36,"code":37,"language":38,"meta":39,"style":39},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git clone https://github.com/YOUR-USERNAME/MemOS.git\ncd MemOS\n","bash","",[41,42,43,59],"code",{"__ignoreMap":39},[44,45,48,52,56],"span",{"class":46,"line":47},"line",1,[44,49,51],{"class":50},"sBMFI","git",[44,53,55],{"class":54},"sfazB"," clone",[44,57,58],{"class":54}," https://github.com/YOUR-USERNAME/MemOS.git\n",[44,60,62,66],{"class":46,"line":61},2,[44,63,65],{"class":64},"s2Zo4","cd",[44,67,68],{"class":54}," MemOS\n",[27,70,71,72],{},"Add the upstream repository as a remote:",[34,73,75],{"className":36,"code":74,"language":38,"meta":39,"style":39},"git remote add upstream https://github.com/MemTensor/MemOS.git\n",[41,76,77],{"__ignoreMap":39},[44,78,79,81,84,87,90],{"class":46,"line":47},[44,80,51],{"class":50},[44,82,83],{"class":54}," remote",[44,85,86],{"class":54}," add",[44,88,89],{"class":54}," upstream",[44,91,92],{"class":54}," https://github.com/MemTensor/MemOS.git\n",[15,94,96],{"id":95},"prepare-development-dependencies","Prepare Development Dependencies",[20,98,99],{},"Ensure the following are installed locally:",[24,101,102,105,108],{},[27,103,104],{},"Git",[27,106,107],{},"Python 3.9+",[27,109,110],{},"Make",[20,112,113],{},"Verify Python:",[34,115,117],{"className":36,"code":116,"language":38,"meta":39,"style":39},"python3 --version\n",[41,118,119],{"__ignoreMap":39},[44,120,121,124],{"class":46,"line":47},[44,122,123],{"class":50},"python3",[44,125,126],{"class":54}," --version\n",[15,128,130],{"id":129},"install-poetry","Install Poetry",[20,132,133],{},"MemOS uses Poetry for dependency management. We recommend using the official installer:",[34,135,137],{"className":36,"code":136,"language":38,"meta":39,"style":39},"curl -sSL https://install.python-poetry.org | python3 -\n",[41,138,139],{"__ignoreMap":39},[44,140,141,144,147,150,154,157],{"class":46,"line":47},[44,142,143],{"class":50},"curl",[44,145,146],{"class":54}," -sSL",[44,148,149],{"class":54}," https://install.python-poetry.org",[44,151,153],{"class":152},"sMK4o"," |",[44,155,156],{"class":50}," python3",[44,158,159],{"class":54}," -\n",[20,161,162],{},"Verify the installation:",[34,164,166],{"className":36,"code":165,"language":38,"meta":39,"style":39},"poetry --version\n",[41,167,168],{"__ignoreMap":39},[44,169,170,173],{"class":46,"line":47},[44,171,172],{"class":50},"poetry",[44,174,126],{"class":54},[20,176,177,178,181],{},"If you see ",[41,179,180],{},"poetry: command not found",", please add the Poetry executable directory to your PATH as prompted by the installer, then restart your terminal and verify again.",[20,183,184,185,192],{},"For more installation options, see the ",[186,187,191],"a",{"href":188,"rel":189},"https://python-poetry.org/docs/#installing-with-the-official-installer",[190],"nofollow","official installation guide",".",[15,194,196],{"id":195},"install-dependencies-and-set-up-pre-commit-hooks","Install Dependencies and Set Up Pre-commit Hooks",[20,198,199],{},"Install all project dependencies and development tools in the repository root:",[34,201,203],{"className":36,"code":202,"language":38,"meta":39,"style":39},"make install\n",[41,204,205],{"__ignoreMap":39},[44,206,207,210],{"class":46,"line":47},[44,208,209],{"class":50},"make",[44,211,212],{"class":54}," install\n",[20,214,215],{},"Tip:",[24,217,218],{},[27,219,220,221,228],{},"If you switch branches or dependencies change, you may need to ",[222,223,224,225],"strong",{},"re-run ",[41,226,227],{},"make install"," to keep the environment consistent.",[230,231,233],"h3",{"id":232},"understanding-memory-modules-and-dependency-selection","Understanding Memory Modules and Dependency Selection",[20,235,236],{},"Before setting up the environment, we need to understand MemOS's memory module classification and their corresponding database dependencies. This will determine which components you need to install.",[15,238,240],{"id":239},"memory-types","Memory Types",[20,242,243,244,247],{},"The MemOS memory system is mainly divided into two categories (identifiers for ",[41,245,246],{},"backend"," config are in parentheses):",[24,249,250,290],{},[27,251,252,255,256,259,260],{},[222,253,254],{},"Textual Memory",": Fact-based memory, ",[222,257,258],{},"you must choose one",".\n",[24,261,262,272,281],{},[27,263,264,267,268,271],{},[41,265,266],{},"tree"," (",[41,269,270],{},"tree_text","): Tree memory (recommended), highest structure.",[27,273,274,267,277,280],{},[41,275,276],{},"general",[41,278,279],{},"general_text","): General memory, based on vector retrieval.",[27,282,283,267,286,289],{},[41,284,285],{},"naive",[41,287,288],{},"naive_text","): Naive memory, no special dependencies (for testing only).",[27,291,292,295,296,259,299],{},[222,293,294],{},"Preference Memory",": User preferences, ",[222,297,298],{},"optional",[24,300,301],{},[27,302,303,306],{},[41,304,305],{},"pref",": Used for storing and retrieving user preferences.",[15,308,310],{"id":309},"database-dependency-matrix","Database Dependency Matrix",[20,312,313],{},"Different memory types require different database support:",[315,316,317,334],"table",{},[318,319,320],"thead",{},[321,322,323,328,331],"tr",{},[324,325,327],"th",{"align":326},"left","Memory Type",[324,329,330],{"align":326},"Component Dependency",[324,332,333],{"align":326},"Note",[335,336,337,353,368,381],"tbody",{},[321,338,339,345,350],{},[340,341,342],"td",{"align":326},[222,343,344],{},"Tree",[340,346,347],{"align":326},[222,348,349],{},"Graph Database",[340,351,352],{"align":326},"Required. Supports Neo4j Desktop, Neo4j Community, PolarDB",[321,354,355,360,365],{},[340,356,357],{"align":326},[222,358,359],{},"General",[340,361,362],{"align":326},[222,363,364],{},"Vector Database",[340,366,367],{"align":326},"Required. Recommended to use Qdrant (or compatible Vector DB)",[321,369,370,375,378],{},[340,371,372],{"align":326},[222,373,374],{},"Naive",[340,376,377],{"align":326},"None",[340,379,380],{"align":326},"No database installation required",[321,382,383,388,393],{},[340,384,385],{"align":326},[222,386,387],{},"Pref",[340,389,390],{"align":326},[222,391,392],{},"Milvus",[340,394,395],{"align":326},"If Preference Memory is enabled, Milvus must be installed",[15,397,399],{"id":398},"about-tree-memory-and-graph-database-selection","About Tree Memory and Graph Database Selection",[20,401,402,403,405],{},"If you choose the most powerful ",[41,404,266],{}," memory (which is what most developers choose), you need to prepare a graph database. Currently, there are three options:",[24,407,408,414,420],{},[27,409,410,413],{},[222,411,412],{},"Neo4j Desktop"," (Recommended for PC): Install directly on PC, comes with full GUI and features, easiest solution.",[27,415,416,419],{},[222,417,418],{},"PolarDB",": Graph database service provided by Alibaba Cloud (paid).",[27,421,422,425],{},[222,423,424],{},"Neo4j Community",": Open source and free, suitable for server or Linux environments.",[20,427,428,431],{},[222,429,430],{},"Special Note",":",[24,433,434,440],{},[27,435,436,437,439],{},"If you use ",[222,438,412],{},", it usually handles graph data independently.",[27,441,436,442,444,445,448],{},[222,443,424],{},", ",[222,446,447],{},"it does not have native vector retrieval capabilities",". Therefore, you need to pair it with an additional vector database (Qdrant) to supplement vector retrieval capabilities.",[15,450,452],{"id":451},"configuration-scheme-for-this-tutorial","Configuration Scheme for This Tutorial",[20,454,455],{},"To help developers get started quickly, this tutorial will use the following configuration:",[24,457,458,468,475],{},[27,459,460,462,463,267,465,467],{},[222,461,327],{},": ",[41,464,266],{},[41,466,270],{},")",[27,469,470,462,472,474],{},[222,471,349],{},[222,473,424],{}," (requires you to download installer or use Docker)",[27,476,477,462,479],{},[222,478,364],{},[222,480,481],{},"Qdrant (Local Mode)",[20,483,484,485,488],{},"Since Neo4j Community lacks vector capabilities, we will introduce Qdrant. To avoid running an extra Qdrant service (Docker), we will configure Qdrant to run in ",[222,486,487],{},"Local Embedded Mode"," (reading/writing local files directly), so you don't need to install an additional Qdrant server. If no external configuration is provided, the system will automatically create a local database.",[15,490,492],{"id":491},"create-configuration-file","Create Configuration File",[20,494,495,496,500,501,192],{},"For .env content, please refer to ",[186,497,499],{"href":498},"/open_source/getting_started/installation#2.-.env-content","env config"," under docker installation for quick configuration.\nFor detailed .env configuration, please see ",[186,502,504],{"href":503},"/open_source/getting_started/rest_api_server/#running-locally","env configuration",[506,507,508],"note",{},[20,509,510,512,515],{},[222,511,333],{},[513,514],"br",{},"\nThe .env configuration file needs to be placed in the MemOS project root directory.",[34,517,519],{"className":36,"code":518,"language":38,"meta":39,"style":39},"cd MemOS\ntouch .env\n",[41,520,521,527],{"__ignoreMap":39},[44,522,523,525],{"class":46,"line":47},[44,524,65],{"class":64},[44,526,68],{"class":54},[44,528,529,532],{"class":46,"line":61},[44,530,531],{"class":50},"touch",[44,533,534],{"class":54}," .env\n",[15,536,538],{"id":537},"configure-dockerfile","Configure Dockerfile",[506,540,541],{},[20,542,543,545,547],{},[222,544,333],{},[513,546],{},"\nThe Dockerfile is located in the docker directory.",[34,549,551],{"className":36,"code":550,"language":38,"meta":39,"style":39},"# Enter the docker directory\ncd docker\n",[41,552,553,559],{"__ignoreMap":39},[44,554,555],{"class":46,"line":47},[44,556,558],{"class":557},"sHwdD","# Enter the docker directory\n",[44,560,561,563],{"class":46,"line":61},[44,562,65],{"class":64},[44,564,565],{"class":54}," docker\n",[20,567,568],{},"Includes fast mode and full mode, distinguishing between slim packages (arm and x86) and full packages (arm and x86).",[34,570,572],{"className":36,"code":571,"language":38,"meta":39,"style":39},"\n● Slim Package: Simplifies heavy dependencies like nvidia, making the image lightweight for faster local deployment.\n  - url: registry.cn-shanghai.aliyuncs.com/memtensor/memos-base:v1.0\n  - url: registry.cn-shanghai.aliyuncs.com/memtensor/memos-base-arm:v1.0\n\n● Full Package: Packages all MemOS dependencies into the image for full functionality. Can be built and started directly by configuring the Dockerfile.\n  - url: registry.cn-shanghai.aliyuncs.com/memtensor/memos-full-base:v1.0.0\n  - url: registry.cn-shanghai.aliyuncs.com/memtensor/memos-full-base-arm:v1.0.0\n",[41,573,574,580,630,642,652,657,722,732],{"__ignoreMap":39},[44,575,576],{"class":46,"line":47},[44,577,579],{"emptyLinePlaceholder":578},true,"\n",[44,581,582,585,588,591,594,597,600,603,606,609,612,615,618,621,624,627],{"class":46,"line":61},[44,583,584],{"class":50},"●",[44,586,587],{"class":54}," Slim",[44,589,590],{"class":54}," Package:",[44,592,593],{"class":54}," Simplifies",[44,595,596],{"class":54}," heavy",[44,598,599],{"class":54}," dependencies",[44,601,602],{"class":54}," like",[44,604,605],{"class":54}," nvidia,",[44,607,608],{"class":54}," making",[44,610,611],{"class":54}," the",[44,613,614],{"class":54}," image",[44,616,617],{"class":54}," lightweight",[44,619,620],{"class":54}," for",[44,622,623],{"class":54}," faster",[44,625,626],{"class":54}," local",[44,628,629],{"class":54}," deployment.\n",[44,631,633,636,639],{"class":46,"line":632},3,[44,634,635],{"class":50},"  -",[44,637,638],{"class":54}," url:",[44,640,641],{"class":54}," registry.cn-shanghai.aliyuncs.com/memtensor/memos-base:v1.0\n",[44,643,645,647,649],{"class":46,"line":644},4,[44,646,635],{"class":50},[44,648,638],{"class":54},[44,650,651],{"class":54}," registry.cn-shanghai.aliyuncs.com/memtensor/memos-base-arm:v1.0\n",[44,653,655],{"class":46,"line":654},5,[44,656,579],{"emptyLinePlaceholder":578},[44,658,660,662,665,667,670,673,676,678,681,683,685,687,690,693,696,699,702,705,708,711,714,717,719],{"class":46,"line":659},6,[44,661,584],{"class":50},[44,663,664],{"class":54}," Full",[44,666,590],{"class":54},[44,668,669],{"class":54}," Packages",[44,671,672],{"class":54}," all",[44,674,675],{"class":54}," MemOS",[44,677,599],{"class":54},[44,679,680],{"class":54}," into",[44,682,611],{"class":54},[44,684,614],{"class":54},[44,686,620],{"class":54},[44,688,689],{"class":54}," full",[44,691,692],{"class":54}," functionality.",[44,694,695],{"class":54}," Can",[44,697,698],{"class":54}," be",[44,700,701],{"class":54}," built",[44,703,704],{"class":54}," and",[44,706,707],{"class":54}," started",[44,709,710],{"class":54}," directly",[44,712,713],{"class":54}," by",[44,715,716],{"class":54}," configuring",[44,718,611],{"class":54},[44,720,721],{"class":54}," Dockerfile.\n",[44,723,725,727,729],{"class":46,"line":724},7,[44,726,635],{"class":50},[44,728,638],{"class":54},[44,730,731],{"class":54}," registry.cn-shanghai.aliyuncs.com/memtensor/memos-full-base:v1.0.0\n",[44,733,735,737,739],{"class":46,"line":734},8,[44,736,635],{"class":50},[44,738,638],{"class":54},[44,740,741],{"class":54}," registry.cn-shanghai.aliyuncs.com/memtensor/memos-full-base-arm:v1.0.0\n",[34,743,745],{"className":36,"code":744,"language":38,"meta":39,"style":39},"# Current example uses slim package url\nFROM registry.cn-shanghai.aliyuncs.com/memtensor/memos-base-arm:v1.0\n\nWORKDIR /app\n\nENV HF_ENDPOINT=https://hf-mirror.com\n\nENV PYTHONPATH=/app/src\n\nCOPY src/ ./src/\n\nEXPOSE 8000\n\nCMD [\"uvicorn\", \"memos.api.server_api:app\", \"--host\", \"0.0.0.0\", \"--port\", \"8000\", \"--reload\"]\n\n",[41,746,747,752,759,763,771,775,783,787,794,799,811,816,826,831],{"__ignoreMap":39},[44,748,749],{"class":46,"line":47},[44,750,751],{"class":557},"# Current example uses slim package url\n",[44,753,754,757],{"class":46,"line":61},[44,755,756],{"class":50},"FROM",[44,758,651],{"class":54},[44,760,761],{"class":46,"line":632},[44,762,579],{"emptyLinePlaceholder":578},[44,764,765,768],{"class":46,"line":644},[44,766,767],{"class":50},"WORKDIR",[44,769,770],{"class":54}," /app\n",[44,772,773],{"class":46,"line":654},[44,774,579],{"emptyLinePlaceholder":578},[44,776,777,780],{"class":46,"line":659},[44,778,779],{"class":50},"ENV",[44,781,782],{"class":54}," HF_ENDPOINT=https://hf-mirror.com\n",[44,784,785],{"class":46,"line":724},[44,786,579],{"emptyLinePlaceholder":578},[44,788,789,791],{"class":46,"line":734},[44,790,779],{"class":50},[44,792,793],{"class":54}," PYTHONPATH=/app/src\n",[44,795,797],{"class":46,"line":796},9,[44,798,579],{"emptyLinePlaceholder":578},[44,800,802,805,808],{"class":46,"line":801},10,[44,803,804],{"class":50},"COPY",[44,806,807],{"class":54}," src/",[44,809,810],{"class":54}," ./src/\n",[44,812,814],{"class":46,"line":813},11,[44,815,579],{"emptyLinePlaceholder":578},[44,817,819,822],{"class":46,"line":818},12,[44,820,821],{"class":50},"EXPOSE",[44,823,825],{"class":824},"sbssI"," 8000\n",[44,827,829],{"class":46,"line":828},13,[44,830,579],{"emptyLinePlaceholder":578},[44,832,834,837,841,844,847,849,851,853,856,858,861,864,867,869,871,873,876,878,880,882,885,887,889,891,894,896,898,900,903,905],{"class":46,"line":833},14,[44,835,836],{"class":50},"CMD",[44,838,840],{"class":839},"sTEyZ"," [",[44,842,843],{"class":152},"\"",[44,845,846],{"class":54},"uvicorn",[44,848,843],{"class":152},[44,850,444],{"class":839},[44,852,843],{"class":152},[44,854,855],{"class":54},"memos.api.server_api:app",[44,857,843],{"class":152},[44,859,860],{"class":54},",",[44,862,863],{"class":152}," \"",[44,865,866],{"class":54},"--host",[44,868,843],{"class":152},[44,870,860],{"class":54},[44,872,863],{"class":152},[44,874,875],{"class":54},"0.0.0.0",[44,877,843],{"class":152},[44,879,860],{"class":54},[44,881,863],{"class":152},[44,883,884],{"class":54},"--port",[44,886,843],{"class":152},[44,888,860],{"class":54},[44,890,863],{"class":152},[44,892,893],{"class":54},"8000",[44,895,843],{"class":152},[44,897,860],{"class":54},[44,899,863],{"class":152},[44,901,902],{"class":54},"--reload",[44,904,843],{"class":152},[44,906,907],{"class":54},"]\n",[15,909,911],{"id":910},"start-docker-client","Start Docker Client",[34,913,915],{"className":36,"code":914,"language":38,"meta":39,"style":39}," # If docker is not installed, please install the corresponding version from:\n https://www.docker.com/\n\n # After installation, start docker via client or command line\n # Start docker via command line\n sudo systemctl start docker\n\n# After installation, check docker status\ndocker ps\n\n# Check docker images (optional)\ndocker images\n\n",[41,916,917,922,927,931,936,941,954,958,963,971,975,980],{"__ignoreMap":39},[44,918,919],{"class":46,"line":47},[44,920,921],{"class":557}," # If docker is not installed, please install the corresponding version from:\n",[44,923,924],{"class":46,"line":61},[44,925,926],{"class":50}," https://www.docker.com/\n",[44,928,929],{"class":46,"line":632},[44,930,579],{"emptyLinePlaceholder":578},[44,932,933],{"class":46,"line":644},[44,934,935],{"class":557}," # After installation, start docker via client or command line\n",[44,937,938],{"class":46,"line":654},[44,939,940],{"class":557}," # Start docker via command line\n",[44,942,943,946,949,952],{"class":46,"line":659},[44,944,945],{"class":50}," sudo",[44,947,948],{"class":54}," systemctl",[44,950,951],{"class":54}," start",[44,953,565],{"class":54},[44,955,956],{"class":46,"line":724},[44,957,579],{"emptyLinePlaceholder":578},[44,959,960],{"class":46,"line":734},[44,961,962],{"class":557},"# After installation, check docker status\n",[44,964,965,968],{"class":46,"line":796},[44,966,967],{"class":50},"docker",[44,969,970],{"class":54}," ps\n",[44,972,973],{"class":46,"line":801},[44,974,579],{"emptyLinePlaceholder":578},[44,976,977],{"class":46,"line":813},[44,978,979],{"class":557},"# Check docker images (optional)\n",[44,981,982,984],{"class":46,"line":818},[44,983,967],{"class":50},[44,985,986],{"class":54}," images\n",[15,988,990],{"id":989},"build-and-start-service","Build and Start Service",[506,992,993],{},[20,994,995,997,999],{},[222,996,333],{},[513,998],{},"\nBuild commands are also executed in the docker directory.",[34,1001,1003],{"className":36,"code":1002,"language":38,"meta":39,"style":39},"# In the docker directory\ndocker compose up neo4j\n",[41,1004,1005,1010],{"__ignoreMap":39},[44,1006,1007],{"class":46,"line":47},[44,1008,1009],{"class":557},"# In the docker directory\n",[44,1011,1012,1014,1017,1020],{"class":46,"line":61},[44,1013,967],{"class":50},[44,1015,1016],{"class":54}," compose",[44,1018,1019],{"class":54}," up",[44,1021,1022],{"class":54}," neo4j\n",[15,1024,1026],{"id":1025},"open-new-terminal-to-start-server","Open New Terminal to Start Server",[34,1028,1030],{"className":36,"code":1029,"language":38,"meta":39,"style":39},"cd MemOS\nmake serve\n",[41,1031,1032,1038],{"__ignoreMap":39},[44,1033,1034,1036],{"class":46,"line":47},[44,1035,65],{"class":64},[44,1037,68],{"class":54},[44,1039,1040,1042],{"class":46,"line":61},[44,1041,209],{"class":50},[44,1043,1044],{"class":54}," serve\n",[1046,1047,1048],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":39,"searchDepth":61,"depth":61,"links":1050},[1051],{"id":232,"depth":632,"text":233},"To contribute to MemOS, you'll need to set up your local development environment.","md",{},"/en/open_source/contribution/setting_up",{"title":5,"description":39},"en/open_source/contribution/setting_up","Fn-TWdPG6r-_vkwl43H7B6--SeNNCJpDpNBUny28CtM",[1060,1068],{"title":1061,"path":1062,"stem":1063,"icon":1064,"framework":6,"module":6,"class":1065,"target":-1,"active":1066,"defaultOpen":1066,"children":-1,"description":1067},"Contributing to MemOS","/open_source/contribution/overview","open_source/contribution/overview","i-ri-eye-line",[],false,"Welcome to the MemOS contribution guide! Learn how to set up your development environment, follow our workflow, write good commit messages, improve documentation, and add tests.",{"title":1069,"path":1070,"stem":1071,"icon":1072,"framework":6,"module":6,"class":1073,"target":-1,"active":1066,"defaultOpen":1066,"children":-1,"description":-1},"Development Workflow","/open_source/contribution/development_workflow","open_source/contribution/development_workflow","i-ri-git-branch-line",[],1770372090581]