[{"data":1,"prerenderedAt":712},["ShallowReactive",2],{"header-nav":3,"footer-primary":155,"footer-secondary":232,"footer-description":258,"header-nav-data":260,"github-stars":262,"8f849cd0-a47b-4e32-bb19-b478973c90f7":366,"dfd79d2b-7af5-4cdb-aa94-3f73de97ebd8":372,"74634853-196b-4ce3-b256-4534c054838f":379,"site-banner":408,"358b0659-1f05-4427-bd1c-4bc03a43c182":412,"9df3f40e-6272-4ec6-a0d7-cc29265e087c":419,"1b444c23-b593-4391-9410-4ca5d2c7a7cb":423,"blog/building-a-marketplace":426,"resource-sidebar-cta":449,"2a1ce79b-5635-40f7-8723-ccb9e9174522":453,"sales-reps":457,"9759e193-35b4-475e-8847-c28a22ca0861":709},{"items":4},[5,74,136,141,148],{"id":6,"title":7,"url":8,"callout":9,"callout_title":10,"children_title":11,"page":8,"children":12},"62c04c6c-5793-4702-8ed1-73dd563fd605","Product",null,"8f849cd0-a47b-4e32-bb19-b478973c90f7","Project Showcase","Use Cases and Features",[13,21,29,37,43,51,59,67],{"id":14,"title":15,"url":16,"description":17,"image":8,"icon":18,"page":19},"e7d7d5ed-89b1-4455-8b4a-8ae92c70e3a0","Headless CMS","/solutions/headless-cms/","Manage and deliver content with ease","code_blocks",{"permalink":20},"/solutions/headless-cms",{"id":22,"title":23,"url":24,"description":25,"image":8,"icon":26,"page":27},"60bdefd9-95e6-45a3-9f81-4748d07c59d3","Backend-as-a-Service","/solutions/backend-as-a-service/","Build and ship applications faster","speed",{"permalink":28},"/solutions/backend-as-a-service",{"id":30,"title":31,"url":32,"description":33,"image":8,"icon":34,"page":35},"5f9aebeb-4f89-445e-9850-5b1261a2743c","Headless Commerce","/solutions/product-information-management/","A single source of truth for products","shopping_cart_checkout",{"permalink":36},"/solutions/product-information-management",{"id":38,"title":39,"url":40,"description":41,"image":8,"icon":42,"page":8},"49e46134-80be-470e-8c73-afb1417fa9b6","100+ More Use Cases","https://directus.io/blog/100-tools-apps-and-platforms-you-can-build-with-directus","Build anything (or everything)","lightbulb",{"id":44,"title":45,"url":46,"description":47,"image":8,"icon":48,"page":49},"a589ac77-a5ce-45c5-a054-e43111e19158","Instant APIs","/products/connect/","Connect a database, get REST + GraphQL APIs","api",{"permalink":50},"/toolkit/connect",{"id":52,"title":53,"url":54,"description":55,"image":8,"icon":56,"page":57},"4a0f129a-c546-4493-b0a9-306e51692e90","Granular Policy-Based Auth","/products/auth/","Provide secure, autonomous data access","lock_person",{"permalink":58},"/toolkit/auth",{"id":60,"title":61,"url":62,"description":63,"image":8,"icon":64,"page":65},"f9250f2c-93a4-4108-80db-011bbe391ecf","Visual Automation Builder","/products/automate/","Automate content and data workflows with ease","build",{"permalink":66},"/toolkit/automate",{"id":68,"title":69,"url":8,"description":70,"image":8,"icon":71,"page":72},"f1ae4e40-5b05-42a4-9cd3-33dda35cc939","50+ More Features","Get everything you need out-of-the-box","auto_fix",{"permalink":73},"/features",{"id":75,"title":76,"url":8,"callout":77,"callout_title":78,"children_title":79,"page":8,"children":80},"2f6ad0d1-6dd3-4f17-b5c8-9f2abf71409a","Resources","dfd79d2b-7af5-4cdb-aa94-3f73de97ebd8","Watch Directus TV","Learn More",[81,88,96,102,109,116,122,129],{"id":82,"title":83,"url":84,"description":85,"image":8,"icon":86,"page":87},"0a3bf9f5-1ef2-43f4-bc09-7ff7488241c5","Blog","/blog","Read our latest articles and guides","library_books",{"permalink":84},{"id":89,"title":90,"url":91,"description":92,"image":8,"icon":93,"page":94},"165e3dc2-e51b-4456-8382-99c5775b0412","Case Studies","#","Case studies and success stories","magic_button",{"permalink":95},"/case-studies",{"id":97,"title":98,"url":99,"description":100,"image":8,"icon":101,"page":8},"5ae324b6-bf44-4c21-95ad-e6dc0c1c1f40","Community Forum","https://community.directus.io/","Questions and conversations","comment",{"id":103,"title":104,"url":91,"description":105,"image":8,"icon":106,"page":107},"b1db03f0-e537-490e-8c0f-c61c401d1024","Agency Directory","Browse our list of agency partners ","handshake",{"permalink":108},"/agency-directory",{"id":110,"title":111,"url":112,"description":113,"image":8,"icon":114,"page":115},"991731c8-eb40-4eec-85a5-6e977bcd7ec9","About Us","/about","Learn more about Directus and the team","supervised_user_circle",{"permalink":112},{"id":117,"title":118,"url":119,"description":120,"image":8,"icon":121,"page":8},"52aebf38-b3ad-4a27-807d-ce52398cd509","Wall of Love","https://testimonial.to/directus/all","See what others are saying about us","heart_plus",{"id":123,"title":124,"url":91,"description":125,"image":8,"icon":126,"page":127},"a86eca65-d5ae-4263-b7d9-4f1a1c50a0b1","Contact","Have a general inquiry or question for us?","mark_email_unread",{"permalink":128},"/contact",{"id":130,"title":131,"url":8,"description":132,"image":8,"icon":133,"page":134},"28225825-8d41-4809-9032-192fbf5c6e5d","Support","Reach out to Directus support","support",{"permalink":135},"/support",{"id":137,"title":138,"url":139,"callout":8,"callout_title":8,"children_title":8,"page":8,"children":140},"a3f1275d-b088-4b11-99bf-143fcbf39104","Developers","/docs",[],{"id":142,"title":143,"url":144,"callout":8,"callout_title":8,"children_title":8,"page":145,"children":147},"fae8fded-d2e2-468e-a68b-82abec7a7225","Enterprise","/solutions/enterprise/",{"permalink":146},"/solutions/enterprise",[],{"id":149,"title":150,"url":151,"callout":8,"callout_title":8,"children_title":8,"page":152,"children":154},"5c5e2fbc-49fd-4e41-a71e-e4f8db2b00cf","Pricing","/pricing/",{"permalink":153},"/pricing/self-hosted",[],{"items":156},[157,174,193,212],{"id":158,"title":159,"url":8,"page":8,"children":160},"522e608a-77b0-4333-820d-d4f44be2ade1","Solutions",[161,164,167,171],{"id":162,"title":15,"url":8,"page":163},"fcafe85a-a798-4710-9e7a-776fe413aae5",{"permalink":20},{"id":165,"title":23,"url":8,"page":166},"79972923-93cf-4777-9e32-5c9b0315fc10",{"permalink":28},{"id":168,"title":169,"url":8,"page":170},"0fa8d0c1-7b64-4f6f-939d-d7fdb99fc407","Product Information",{"permalink":36},{"id":172,"title":173,"url":40,"page":8},"63946d54-6052-4780-8ff4-91f5a9931dcc","100+ Things to Build",{"id":175,"title":76,"url":8,"page":8,"children":176},"8ab4f9b1-f3e2-44d6-919b-011d91fe072f",[177,181,185,189],{"id":178,"title":179,"url":180,"page":8},"f951fb84-8777-4b84-9e91-996fe9d25483","Documentation","https://docs.directus.io",{"id":182,"title":183,"url":184,"page":8},"366febc7-a538-4c08-a326-e6204957f1e3","Guides","https://docs.directus.io/guides/",{"id":186,"title":187,"url":188,"page":8},"aeb9128e-1c5f-417f-863c-2449416433cd","Community","https://directus.chat",{"id":190,"title":191,"url":192,"page":8},"da1c2ed8-0a77-49b0-a903-49c56cb07de5","Release Notes","https://github.com/directus/directus/releases",{"id":194,"title":131,"url":8,"page":8,"children":195},"d61fae8c-7502-494a-822f-19ecff3d0256",[196,200,204,208],{"id":197,"title":198,"url":199,"page":8},"8c43c781-7ebd-475f-a931-747e293c0a88","Issue Tracker","https://github.com/directus/directus/issues",{"id":201,"title":202,"url":203,"page":8},"d77bb78e-cf7b-4e01-932a-514414ba49d3","Feature Requests","https://github.com/directus/directus/discussions?discussions_q=is:open+sort:top",{"id":205,"title":206,"url":207,"page":8},"4346be2b-2c53-476e-b53b-becacec626a6","Community Chat","https://discord.com/channels/725371605378924594/741317677397704757",{"id":209,"title":210,"url":211,"page":8},"26c115d2-49f7-4edc-935e-d37d427fb89d","Cloud Dashboard","https://directus.cloud",{"id":213,"title":214,"url":8,"page":8,"children":215},"49141403-4f20-44ac-8453-25ace1265812","Organization",[216,220,225,229],{"id":217,"title":218,"url":112,"page":219},"1f36ea92-8a5e-47c8-914c-9822a8b9538a","About",{"permalink":112},{"id":221,"title":222,"url":91,"page":223},"b84bf525-5471-4b14-a93c-225f6c386005","Careers",{"permalink":224},"/careers",{"id":226,"title":227,"url":228,"page":8},"86aabc3a-433d-434b-9efa-ad1d34be0a34","Brand Assets","https://drive.google.com/drive/folders/1lBOTba4RaA5ikqOn8Ewo4RYzD0XcymG9?usp=sharing",{"id":230,"title":124,"url":8,"page":231},"8d2fa1e3-198e-4405-81e1-2ceb858bc237",{"permalink":128},{"items":233},[234,240,246,252],{"id":235,"title":236,"url":8,"page":237,"children":239},"8a1b7bfa-429d-4ffc-a650-2a5fdcf356da","Cloud Policies",{"permalink":238},"/cloud-policies",[],{"id":241,"title":242,"url":91,"page":243,"children":245},"bea848ef-828f-4306-8017-6b00ec5d4a0c","License",{"permalink":244},"/bsl",[],{"id":247,"title":248,"url":91,"page":249,"children":251},"4e914f47-4bee-42b7-b445-3119ee4196ef","Terms",{"permalink":250},"/terms",[],{"id":253,"title":254,"url":91,"page":255,"children":257},"ea69eda6-d317-4981-8421-fcabb1826bfd","Privacy",{"permalink":256},"/privacy",[],{"description":259},"\u003Cp>A composable backend to build your Headless CMS, BaaS, and more.&nbsp;\u003C/p>",{"header_cta_buttons":261},"74634853-196b-4ce3-b256-4534c054838f",{"id":263,"node_id":264,"name":265,"full_name":266,"private":267,"owner":268,"html_url":285,"description":286,"fork":267,"url":287,"forks_url":288,"keys_url":289,"collaborators_url":290,"teams_url":291,"hooks_url":292,"issue_events_url":293,"events_url":294,"assignees_url":295,"branches_url":296,"tags_url":297,"blobs_url":298,"git_tags_url":299,"git_refs_url":300,"trees_url":301,"statuses_url":302,"languages_url":303,"stargazers_url":304,"contributors_url":305,"subscribers_url":306,"subscription_url":307,"commits_url":308,"git_commits_url":309,"comments_url":310,"issue_comment_url":311,"contents_url":312,"compare_url":313,"merges_url":314,"archive_url":315,"downloads_url":316,"issues_url":317,"pulls_url":318,"milestones_url":319,"notifications_url":320,"labels_url":321,"releases_url":322,"deployments_url":323,"created_at":324,"updated_at":325,"pushed_at":326,"git_url":327,"ssh_url":328,"clone_url":329,"svn_url":285,"homepage":330,"size":331,"stargazers_count":332,"watchers_count":332,"language":333,"has_issues":334,"has_projects":334,"has_downloads":334,"has_wiki":267,"has_pages":267,"has_discussions":334,"forks_count":335,"mirror_url":8,"archived":267,"disabled":267,"open_issues_count":336,"license":337,"allow_forking":334,"is_template":267,"web_commit_signoff_required":267,"has_pull_requests":334,"pull_request_creation_policy":342,"topics":343,"visibility":284,"forks":335,"open_issues":336,"watchers":332,"default_branch":362,"temp_clone_token":8,"custom_properties":363,"organization":364,"network_count":335,"subscribers_count":365},7122594,"MDEwOlJlcG9zaXRvcnk3MTIyNTk0","directus","directus/directus",false,{"login":265,"id":269,"node_id":270,"avatar_url":271,"gravatar_id":272,"url":273,"html_url":274,"followers_url":275,"following_url":276,"gists_url":277,"starred_url":278,"subscriptions_url":279,"organizations_url":280,"repos_url":281,"events_url":282,"received_events_url":283,"type":214,"user_view_type":284,"site_admin":267},15967950,"MDEyOk9yZ2FuaXphdGlvbjE1OTY3OTUw","https://avatars.githubusercontent.com/u/15967950?v=4","","https://api.github.com/users/directus","https://github.com/directus","https://api.github.com/users/directus/followers","https://api.github.com/users/directus/following{/other_user}","https://api.github.com/users/directus/gists{/gist_id}","https://api.github.com/users/directus/starred{/owner}{/repo}","https://api.github.com/users/directus/subscriptions","https://api.github.com/users/directus/orgs","https://api.github.com/users/directus/repos","https://api.github.com/users/directus/events{/privacy}","https://api.github.com/users/directus/received_events","public","https://github.com/directus/directus","The flexible backend for all your projects 🐰 Turn your DB into a headless CMS, admin panels, or apps with a custom UI, instant APIs, auth & more.","https://api.github.com/repos/directus/directus","https://api.github.com/repos/directus/directus/forks","https://api.github.com/repos/directus/directus/keys{/key_id}","https://api.github.com/repos/directus/directus/collaborators{/collaborator}","https://api.github.com/repos/directus/directus/teams","https://api.github.com/repos/directus/directus/hooks","https://api.github.com/repos/directus/directus/issues/events{/number}","https://api.github.com/repos/directus/directus/events","https://api.github.com/repos/directus/directus/assignees{/user}","https://api.github.com/repos/directus/directus/branches{/branch}","https://api.github.com/repos/directus/directus/tags","https://api.github.com/repos/directus/directus/git/blobs{/sha}","https://api.github.com/repos/directus/directus/git/tags{/sha}","https://api.github.com/repos/directus/directus/git/refs{/sha}","https://api.github.com/repos/directus/directus/git/trees{/sha}","https://api.github.com/repos/directus/directus/statuses/{sha}","https://api.github.com/repos/directus/directus/languages","https://api.github.com/repos/directus/directus/stargazers","https://api.github.com/repos/directus/directus/contributors","https://api.github.com/repos/directus/directus/subscribers","https://api.github.com/repos/directus/directus/subscription","https://api.github.com/repos/directus/directus/commits{/sha}","https://api.github.com/repos/directus/directus/git/commits{/sha}","https://api.github.com/repos/directus/directus/comments{/number}","https://api.github.com/repos/directus/directus/issues/comments{/number}","https://api.github.com/repos/directus/directus/contents/{+path}","https://api.github.com/repos/directus/directus/compare/{base}...{head}","https://api.github.com/repos/directus/directus/merges","https://api.github.com/repos/directus/directus/{archive_format}{/ref}","https://api.github.com/repos/directus/directus/downloads","https://api.github.com/repos/directus/directus/issues{/number}","https://api.github.com/repos/directus/directus/pulls{/number}","https://api.github.com/repos/directus/directus/milestones{/number}","https://api.github.com/repos/directus/directus/notifications{?since,all,participating}","https://api.github.com/repos/directus/directus/labels{/name}","https://api.github.com/repos/directus/directus/releases{/id}","https://api.github.com/repos/directus/directus/deployments","2012-12-12T01:35:36Z","2026-03-18T14:36:38Z","2026-03-18T15:43:33Z","git://github.com/directus/directus.git","git@github.com:directus/directus.git","https://github.com/directus/directus.git","https://directus.io",438225,34516,"TypeScript",true,4638,385,{"key":338,"name":339,"spdx_id":340,"url":8,"node_id":341},"other","Other","NOASSERTION","MDc6TGljZW5zZTA=","all",[48,344,345,346,347,348,265,349,350,351,352,353,354,355,356,357,358,359,360,361],"app","cms","composable","data-visualization","database","graphql","headless-cms","javascript","mariadb","mssql","mysql","no-code","node","postgresql","sql","sqlite","typescript","vue","main",{},{"login":265,"id":269,"node_id":270,"avatar_url":271,"gravatar_id":272,"url":273,"html_url":274,"followers_url":275,"following_url":276,"gists_url":277,"starred_url":278,"subscriptions_url":279,"organizations_url":280,"repos_url":281,"events_url":282,"received_events_url":283,"type":214,"user_view_type":284,"site_admin":267},326,{"id":9,"title":367,"description":368,"image":369,"external_url":8,"icon":8,"badge":8,"page":370,"resource":8},"Built With Directus","See what everyone's been building with Directus","e658de72-fb08-4ed2-8029-215c712c789e",{"permalink":371},"/built-with-directus",{"id":77,"title":373,"description":374,"image":375,"external_url":376,"icon":377,"badge":378,"page":8,"resource":8},"Directus TV","Go down the rabbit hole with hours of original video content from our team. ","ab70faf5-fc28-4608-a7e7-74fd4f020a9d","/tv","connected_tv","Video",{"alignment":380,"style":381,"experiment_enabled":267,"experiment":8,"experiment_variant":382,"buttons":385,"variants":395},"center","default",{"id":383,"key":384,"experiment":8},"8c4951b4-a6f9-4c06-9f71-fd39a3bdad1e","control",[386,389,392],{"id":387,"block_button_id":388},15,"358b0659-1f05-4427-bd1c-4bc03a43c182",{"id":390,"block_button_id":391},16,"9df3f40e-6272-4ec6-a0d7-cc29265e087c",{"id":393,"block_button_id":394},232,"1b444c23-b593-4391-9410-4ca5d2c7a7cb",[396],{"id":397,"alignment":380,"style":381,"buttons":398,"experiment_variant":405},"e1885d45-3119-41a3-8294-3cd796ea6f02",[399,402],{"id":400,"block_button_id":401},203,"ade37731-147d-48c4-864a-cec007576362",{"id":403,"block_button_id":404},202,"1cb4e89f-f7de-4b46-bbb8-080191517a72",{"id":406,"key":407},"66d2be4f-2492-4944-8060-039c15515918","variant",{"id":409,"icon":377,"content":410,"link":411},"812bf73d-ebfb-4246-9538-937a09a0c795","Learn more about our native MCP","https://directus.io/mcp",{"id":388,"external_url":8,"label":413,"color":414,"outline":267,"icon":8,"size":415,"target":416,"ph_event":8,"page":417,"resource":8},"Book a Demo","primary","medium","_self",{"permalink":418},"/demo",{"id":391,"external_url":420,"label":421,"color":422,"outline":267,"icon":8,"size":415,"target":416,"ph_event":8,"page":8,"resource":8},"https://directus.cloud/account/register","Get Started","secondary",{"id":394,"external_url":211,"label":424,"color":422,"outline":334,"icon":425,"size":415,"target":416,"ph_event":8,"page":8,"resource":8},"Log In","arrow_forward",{"title":427,"category":428,"date_published":429,"summary":430,"image":431,"author":433,"blocks":438,"type":444,"video":8,"seo":445,"related_resources":448},"What We Considered When Building a Marketplace","product","2024-03-07T09:58:00.000Z","Following the release of the Marketplace Beta, it's time to reflect on what it actually takes to put together a Marketplace.",{"id":432,"description":8},"feeced07-cfe6-4c27-bcf1-d73ee888b44d",{"name":434,"job_title":435,"image":436,"slug":437},"Rijk van Zanten","CTO, Co-Founder","69402871-4f45-4bea-a8d1-a54a7eb7adad","rijk-van-zanten",[439],{"id":440,"collection":441,"item":442,"spacing":8,"sort":443},"7c23588c-25fb-42a3-a2fe-a83f969b9137","block_richtext","9759e193-35b4-475e-8847-c28a22ca0861",1,{"title":83},{"title":446,"meta_description":447,"no_follow":267,"no_index":267,"canonical_url":8,"json_ld":8},"Building the Directus Marketplace | Directus Blog","Behind the scenes of building the Directus Marketplace. Design decisions and vision for extensions.",[],{"resource_sidebar_cta_header":450,"resource_sidebar_cta_description":451,"resource_sidebar_cta_form":452},"Sign up for updates 🐇","Get insights, releases, and exciting news delivered directly to your inbox once a month. No spam - we promise. 🙂","2a1ce79b-5635-40f7-8723-ccb9e9174522",{"id":452,"alignment":454,"show_labels":267,"inline":267,"form":455},"left",{"hubspot_form_id":456,"typeform_form_id":8,"route_to_meeting_link_on_success":267},"d57a69e4-6f43-4768-a600-5f7d30306260",{"reps":458},[459,515],{"name":460,"sdr":8,"link":461,"countries":462,"states":464},"John Daniels","https://meet.directus.io/meetings/john2144/john-contact-form-meeting",[463],"United States",[465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514],"Michigan","Indiana","Ohio","West Virginia","Kentucky","Virginia","Tennessee","North Carolina","South Carolina","Georgia","Florida","Alabama","Mississippi","New York","MI","IN","OH","WV","KY","VA","TN","NC","SC","GA","FL","AL","MS","NY","Connecticut","CT","Delaware","DE","Maine","ME","Maryland","MD","Massachusetts","MA","New Hampshire","NH","New Jersey","NJ","Pennsylvania","PA","Rhode Island","RI","Vermont","VT","Washington DC","DC",{"name":516,"link":517,"countries":518},"Michelle Riber","https://meetings.hubspot.com/mriber",[519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,496,707,708],"Albania","ALB","Algeria","DZA","Andorra","AND","Angola","AGO","Austria","AUT","Belgium","BEL","Benin","BEN","Bosnia and Herzegovina","BIH","Botswana","BWA","Bulgaria","BGR","Burkina Faso","BFA","Burundi","BDI","Cameroon","CMR","Cape Verde","CPV","Central African Republic","CAF","Chad","TCD","Comoros","COM","Côte d'Ivoire","CIV","Croatia","HRV","Czech Republic","CZE","Democratic Republic of Congo","COD","Denmark","DNK","Djibouti","DJI","Egypt","EGY","Equatorial Guinea","GNQ","Eritrea","ERI","Estonia","EST","Eswatini","SWZ","Ethiopia","ETH","Finland","FIN","France","FRA","Gabon","GAB","Gambia","GMB","Ghana","GHA","Greece","GRC","Guinea","GIN","Guinea-Bissau","GNB","Hungary","HUN","Iceland","ISL","Ireland","IRL","Italy","ITA","Kenya","KEN","Latvia","LVA","Lesotho","LSO","Liberia","LBR","Libya","LBY","Liechtenstein","LIE","Lithuania","LTU","Luxembourg","LUX","Madagascar","MDG","Malawi","MWI","Mali","MLI","Malta","MLT","Mauritania","MRT","Mauritius","MUS","Moldova","MDA","Monaco","MCO","Montenegro","MNE","Morocco","MAR","Mozambique","MOZ","Namibia","NAM","Niger","NER","Nigeria","NGA","North Macedonia","MKD","Norway","NOR","Poland","POL","Portugal","PRT","Republic of Congo","COG","Romania","ROU","Rwanda","RWA","San Marino","SMR","São Tomé and Príncipe","STP","Senegal","SEN","Serbia","SRB","Seychelles","SYC","Sierra Leone","SLE","Slovakia","SVK","Slovenia","SVN","Somalia","SOM","South Africa","ZAF","South Sudan","SSD","Spain","ESP","Sudan","SDN","Sweden","SWE","Tanzania","TZA","Togo","TGO","Tunisia","TUN","Uganda","UGA","United Kingdom","GBR","Vatican City","VAT","Zambia","ZMB","Zimbabwe","ZWE","UK","Germany","Netherlands","Switzerland","CH","NL",{"id":442,"content":710,"color":711},"\u003Cp>This week we announced the Directus Marketplace Beta - a new way to discover and install extensions in Directus projects across Cloud and self-hosted instances.\u003C/p>\n\u003Cp>This has been a long time coming, and I wanted to take some time and reflect on what it actually takes to put together a Marketplace for such a mature and well-adopted project.\u003C/p>\n\u003Cp>\u003C!-- notionvc: bcfa495d-ad19-4b4d-bcff-bc7646485886 -->\u003C/p>\n\u003Cp>\u003Cimg src=\"https://marketing.directus.app/assets/30431b63-1297-432a-aa22-5fde8aaccf24?width=3276&amp;height=2160\" alt=\"Marketplace Extension\">\u003C/p>\n\u003Ch2>Our Take On A Marketplace\u003C/h2>\n\u003Cp>The term &lsquo;marketplace&rsquo; can come with a lot of baggage, and even internally, it took a while decide where on the spectrum our offering will lie.\u003C/p>\n\u003Cp>On one end, we have the \"open listing\" approach. This offers maximum freedom and diversity, but comes at the cost of potential quality and security issues. Users need to exercise caution and rely heavily on reviews and reputation. Think of the Chrome Extensions Store - where anyone can publish new browser extensions.\u003C/p>\n\u003Cp>On the other side, we have the \"highly-controlled submission-based store\" model. This ensures a consistent user experience and quality, but limits variety and requires significant resources for curation and review. Think of the iOS App Store with strict submission criteria.\u003C/p>\n\u003Cp>For Directus, we often for an open \"listing\" approach. This aligns with our philosophy of being community-first and empowers users to contribute diverse modules and extensions. However, we acknowledge the need for some guardrails to maintain platform integrity and user trust.\u003C/p>\n\u003Ch2>Controlling Our Registry\u003C/h2>\n\u003Cp>Many extension authors distribute extensions by publishing packages on npm. We decided to piggyback off this to power the Marketplace search so we could highlight already-published extensions, allow authors to control publishing of new versions, and to use npm to &lsquo;host&rsquo; code.\u003C/p>\n\u003Cp>While we use npm as a data source for the new Directus Extensions Registry, it goes beyond simply copying listings. We've implemented a custom API (based on Directus) that empowers users with better search and filtering.\u003C/p>\n\u003Cp>Security is also paramount, and owning the Registry ensures it is taken seriously. It empowers us to store additional data related to extensions, including the ability to block or delist them if necessary. This ensures the marketplace remains a trustworthy source for users.\u003C/p>\n\u003Cp>We're constantly innovating, and the registry will be no exception. We envision a future where extensions and authors can have a \"verified\" status and also exploring the possibility of incorporating extensions from sources beyond npm. This could, of course, mean sources that are accessed behind a paywall which will reward extension authors for their contributions.\u003C/p>\n\u003Ch2>Security, Stability, and Liability\u003C/h2>\n\u003Cp>Running external code in Directus poses a non-zero risk, and that&rsquo;s unfortunately the reality of externally-contributed extensions whatever model we choose to take. There are really three types of risk - security, stability, and liability.\u003C/p>\n\u003Cp>Security is the number one consideration above all others - after all, Directus can directly access your data. For this reason, the Marketplace will only surface extensions which are client-side or sandboxed on the server-side. Sandboxed extensions must explicitly request permissions both internally and to make external requests. This model is expected of an &ldquo;App Store&rdquo;.\u003C/p>\n\u003Cp>What happens if an extension causes the Directus instance to fail? This question matters even more for Cloud projects, where the degree of user visibility and control is naturally lower. When initially conceptualizing the Marketplace, an extension-free &lsquo;Safe Mode&rsquo; feels a bit out there, but we&rsquo;ve needed to build one to allow project administrators to disable offending extensions and get their project running again.\u003C/p>\n\u003Cp>Liability is something we&rsquo;re still thinking about. While the current value of the Marketplace is focused on discoverability and installation of publicly-accessible extensions, it&rsquo;s fair to communicate that issues are the responsibility of either project administrators or extension authors. As we look ahead to monetized extensions - handling payments, verifying authors, and generally being more involved in the relationship between authors and project administrators, this is an area that must be thought about more.\u003C/p>\n\u003Ch2>Running Extensions Everywhere\u003C/h2>\n\u003Cp>Historically, extensions have not been available on Directus Professional Cloud, but all of the points we&rsquo;ve spoken about are critical to ensure that the Marketplace will run on all projects regardless of infrastructure. This is especially true of the security and stability considerations.\u003C/p>\n\u003Cp>One other challenge to overcome is extension compatibility - as Directus has increased capabilities (and breaking changes), extensions may not work on all versions. We also lack capacity to validate compatibility of each extension in each version.\u003C/p>\n\u003Cp>Authors must provide metadata within an extension to state the version that it will work in. This may fall out of date and in these cases we automatically show a compatibility warning - this doesn&rsquo;t mean extensions won&rsquo;t work, just that we can&rsquo;t be sure and the author hasn&rsquo;t validated that it will.\u003C/p>\n\u003Ch2>What&rsquo;s The Catch?\u003C/h2>\n\u003Cp>We sit in an interesting position today. At the first Leap Week in October, we announced the Sandboxed Extensions SDK - requiring explicit permissions to be requested and granted in Directus projects.\u003C/p>\n\u003Cp>This means there are a host of existing Directus extensions that won&rsquo;t run in the Marketplace by default and require some level of refactoring. This isn&rsquo;t ideal, but it is needed to build trust and security into the Marketplace from day one. It is also a statement about how we expect extensions to be built in the future if authors want to distribute them.\u003C/p>\n\u003Cp>The Sandboxed Extensions SDK is also having lots of active development to ensure that authors have a path to migrate their extensions. It&rsquo;s not quite there today, but it will be soon.\u003C/p>\n\u003Cp>By using npm as our primary registry source, we have also tried to lower the burden on extension authors to get their contributions in front of users. They can keep doing what they have been, and we do the work of finding and surfacing their extensions.\u003C/p>\n\u003Ch2>To The Future\u003C/h2>\n\u003Cp>The Marketplace is far from done. The Directus Marketplace Beta is the start of a new era for Directus - one where projects are truly customizable, extensible, and composable. There&rsquo;s lots to do - much on the side of the extension-building developer experience, but also on enhancing the Marketplace itself. Some of this is solved by code. Some by having dedicated teams on various parts of administering a Marketplace. And, of course, some by the continued growth of and support from our community of extension authors.\u003C/p>\n\u003Cp>This version of the Marketplace is about discovery and installation. But tomorrow&rsquo;s will be about growth and shared success.\u003C/p>\n\u003Cp>I hope you found this interesting, and if you have any feedback about the Marketplace Beta, please drop by our Discord \u003Ccode>#marketplace-beta\u003C/code> channel\u003C/p>\n\u003Cp>\u003C!-- notionvc: d0ce81ab-3d8a-4947-84d1-268854d3af38 -->\u003C/p>","foreground",1773850372531]