In this guide, you’ll learn how to get started with the Writer Framework by building a simple “Hello, World” application. This beginner-friendly guide will help you install the necessary tools, set up an app, and deploy it to the Writer Cloud.
Step 1: Install Writer Framework and run the demo app
Writer Framework works on Linux, Mac, and Windows. It supports Python versions 3.9.2 through 3.12. We recommend using a virtual environment.
Python 3.13 is not yet supported.
1
Install Writer Framework
Use the following command to install the Writer Framework using pip. Open your command line interface and type:
pip install writer
This will download and install the Writer Framework and all its required dependencies.
2
Test installation with demo application
Once the installation is complete, you can verify that everything is set up correctly by running the built-in demo application. Navigate to your desired directory and type:
writer hello
This command creates a subfolder named hello and launches the Writer Framework, opening a visual editor accessible through a local URL displayed in your command line. This demo app illustrates the different components available in Writer Framework, helping you get familiar with the setup.
Now that we’ve tested the setup, let’s create our first “Hello, World” app using the ai-starter template. This template showcases how quickly you can build AI-powered applications with the Writer Framework.Use the following command to generate the app structure:
writer create hello-world --template=ai-starter
This will create a new app folder, hello-world, with the following structure:
main.py - The entry point for the app. You can import anything you need from here.
.wf/ - This folder contains the UI component declarations. Maintained by the Writer Framework’s visual editor.
static/ - This folder contains front-end static files which you might want to distribute with your app, such as images and stylesheets.
To start building and customizing your app visually, use the Writer Framework’s editor. This browser-based interface allows you to drag components, arrange layouts, and modify settings in real-time.
writer edit hello-world
After running this command, you’ll see a local URL displayed in your command line. Open this URL in a web browser to access the editor.
In your terminal, enter the following command to open the editor:
writer edit hello-world
This command opens the Writer Framework editor in your browser, where you’ll see a live preview of your app. The editor interface includes a component library on the left, a canvas in the center for building layouts, and a settings panel on the right for customizing selected components.
The editor starts by default on port 4005. If you launch multiple editors in parallel and do not specify a port, Writer Framework will automatically assign the next port until reaching the limit of 4099.
It’s not recommended to expose the Framework to the Internet. If you need to access the editor remotely, we recommend setting up an SSH tunnel. By default, requests from non-local origins are rejected as a security measure to protect against drive-by attacks.If you need to disable this protection, use the flag --enable-remote-edit.
2
Add Components to Your Canvas
On the left sidebar, browse through the Component Library and try dragging a few components onto the Canvas. For example, you can add a Text component to display “Hello, World!” or try other components to see how they work together.Experiment with arranging these components on the canvas to create a simple layout.
With a component selected, look at the Settings Panel on the right side. Here, you can edit properties like text content, colors, and alignment to see how it changes the appearance and behavior of the component on the canvas.This panel allows you to customize components without writing any code, giving you a quick and visual way to build a frontend.
4
Change the App Name in main.py
To personalize your app further, open main.py in the root of your project folder. Locate the following line:
Change "AI STARTER" to something unique, like "My First Writer App". Save the file, and you’ll see the updated name reflected immediately in the editor.
App name updated in the Writer Framework editor
For now, this simple exploration gives you an idea of how the framework enables rapid frontend building without code. In later tutorials, like creating a Chat assistant or a Social post generator, you’ll explore more advanced components and layouts using this visual editor.
When your app is ready, execute the run command, which will allow others to run, but not edit, your Framework app.
writer run hello-world
Your app starts by default on port 3005. If you launch multiple apps in parallel and do not specify a port, Writer Framework will automatically assign the next port until reaching the limit of 3099.
You can specify a port and host. Specifying --host 0.0.0.0 enables you to share your application in your local network.
Congratulations! You’ve set up and configured your first app with the Writer Framework. Now, try building a Chat assistant or a Social post generator to put these skills into action.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Writer AI Studio","colors":{"primary":"#BFCBFF","light":"#6985FF","dark":"#5551ff"},"logo":{"light":"https://mintcdn.com/writer/YZ72OUP7BQyK8p2G/logo/writer_logo_light.svg?fit=max\u0026auto=format\u0026n=YZ72OUP7BQyK8p2G\u0026q=85\u0026s=c9a784871f9b98724bb1eae947e745ed","dark":"https://mintcdn.com/writer/YZ72OUP7BQyK8p2G/logo/writer_logo_dark.svg?fit=max\u0026auto=format\u0026n=YZ72OUP7BQyK8p2G\u0026q=85\u0026s=9e22a34b91e20df881d68634a0042c1d"},"favicon":"https://mintcdn.com/writer/z-qGRP1BKyHYhEJN/images/icons/favicon.svg?fit=max\u0026auto=format\u0026n=z-qGRP1BKyHYhEJN\u0026q=85\u0026s=33356fdc372b2640b92c5546da07c9e0","api":{"playground":{"display":"interactive"},"examples":{"languages":["curl","python","javascript"]}},"navbar":{"primary":{"type":"button","label":"Sign in","href":"https://app.writer.com/login"}},"footer":{"socials":{"x":"https://x.com/Get_Writer","github":"https://github.com/writer","linkedin":"https://www.linkedin.com/company/getwriter"}},"seo":{"metatags":{"description":"Writer AI Studio developer documentation - Build AI agents with APIs, SDKs, Agent Builder, and no-code tools. Integrate generative AI into your applications.","og:site_name":"Writer AI Studio Documentation","og:type":"website","twitter:card":"summary_large_image","twitter:site":"@Get_Writer"},"indexing":"all"},"integrations":{"gtm":{"tagId":"GTM-NXVXDK"},"segment":{"key":"o2ZzfP0pJxH4cihXBPrF4IlbGqmG34BA"}},"contextual":{"options":["copy","view","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"writer","hasAudioNarration":false,"actualSubdomain":"writer","customDomains":["dev.writer.com"],"gitSource":{"type":"github","owner":"writerinternal","repo":"docs","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae4c1eae34cca49cc969e2b","collectionId":"95a2c848-ef11-45d4-91ec-a4d1045cf7fd","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae4c1eae34cca49cc969e2b"},"feedback":{"thumbs":true,"issues":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae4c1eae34cca49cc969e2b","clientVersion":"0.0.4043","searchFilterCounts":[{"language":"default","tag":"Home","count":98},{"language":"default","tag":"Writer Framework","count":71},{"language":"default","tag":"Component reference","count":45},{"language":"default","tag":"API Reference","count":32},{"language":"default","tag":"Connect to your data","count":31},{"language":"default","tag":"Available prebuilt connectors","count":27},{"language":"default","tag":"Content","count":17},{"language":"default","tag":"Legacy API Reference","count":16},{"language":"default","tag":"Getting started","count":14},{"language":"default","tag":"Input","count":13}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"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":[{"filePath":"styles.css","content":"/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLGT9Z11lFc-K.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLGT9Z1JlFc-K.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLGT9Z1xlFQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLEj6Z11lFc-K.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLEj6Z1JlFc-K.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLEj6Z1xlFQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n:root{--purple-1:#5551FF;--purple-2:#4A46DA;--black:#000;--gray-1:#333}body{font-family:\"Graphik\",sans-serif;font-weight:400}body.bold{font-weight:600}h1,h2,h3{font-family:\"Poppins\",sans-serif}h1{font-weight:600!important}h2,h3{font-weight:500}img[src$=no-code],img[src$=quickstart]{border:1px solid #e4e7ed}img[src$=auth]{min-width:25%;width:35%;margin:auto}img[src$=auth-table]{min-width:25px;width:25px}.imageBorder,img[src$=framework]{border:1px solid #e4e7ed}.flex-none.min-w-full.text-sm.overflow-x-auto{background-color:#171b1a}.no-bullet li{list-style-type:none;font-size:small}.large-icon{width:60px;height:100%}.bg-primary\\/10{background-color:#bfcbff}.text-primary{color:#000}.dark .prompts{color:#828282}.dark .prompts,.papers,.prompts{font-family:'Roboto Mono',monospace}.prompts{color:#000}.papers{font-size:small;padding-left:20px;padding-right:20px;text-align:justify}td,th{padding:10px;text-align:left}.update table td,.update table th{word-break:break-word}.expandedImageContainer{padding:16px;border-radius:16px;background:#e9eef1;overflow:hidden;display:flex;justify-content:center}.expandedImageContainerInner{display:flex;align-items:flex-start;max-width:300px;max-height:210px}.expandedImageContainer img{max-height:210px}.components__table{table-layout:fixed;width:300px}.button-wrapper{margin-top:30px}.button{border:0;cursor:pointer;font-size:14px;font-weight:600;padding:8px 20px;position:relative;outline:0;transition:background-color .1s ease-in}.primary-button{background-color:var(--purple-1);border-radius:40px;color:#fff;display:inline-flex;align-items:center}.secondary-button{background-color:var(--black);border-radius:30px;color:#fff}.button--arrow{padding-right:40px}.componentFields td,.componentFields th{padding:8px;border:1px solid rgb(var(--gray-200))}.componentFields .desc{width:50ch}:is(.dark .componentFields td, .dark .componentFields th, .dark .blueprintFields td, .dark .blueprintFields th){border:1px solid rgb(var(--gray-800))}.blueprintFields td,.blueprintFields th{padding:8px;border:1px solid rgb(var(--gray-200));vertical-align:top}#topbar-cta-button{margin:0}#topbar-cta-button a,li[id=\"https://app.writer.com/login\"] a{display:inline-flex;align-items:center;background-color:var(--purple-1)!important;border-radius:9999px;padding:4px 14px;font-weight:600;font-size:14px;text-decoration:none;transition:background-color .2s ease;line-height:24px}#topbar-cta-button a span,li[id=\"https://app.writer.com/login\"] a div,li[id=\"https://app.writer.com/login\"] a span{color:#fff!important}#topbar-cta-button a:hover,li[id=\"https://app.writer.com/login\"] a:hover{background-color:var(--purple-2)!important}#topbar-cta-button svg{margin-left:4px;height:16px;width:16px}li[id=\"https://app.writer.com/login\"]{margin:0;max-width:100%;box-sizing:border-box}li[id=\"https://app.writer.com/login\"] a{display:inline-flex!important;align-items:center!important;border-radius:9999px!important;padding:4px 8px 4px 14px!important;font-weight:600!important;font-size:14px!important;text-decoration:none!important;transition:background-color .2s ease!important;line-height:24px!important;max-width:100%!important;box-sizing:border-box!important;white-space:nowrap!important;overflow:hidden!important}li[id=\"https://app.writer.com/login\"] svg{margin-left:0!important;height:16px!important;width:16px!important}#topbar-cta-button svg path,li[id=\"https://app.writer.com/login\"] svg path{stroke:#fff!important;stroke-width:1.5!important;stroke-linecap:round!important;fill:none!important}div[id=sidebar-content],div[id=sidebar],ul[class*=\"bg-zinc-950/5\"]{overflow-x:hidden;box-sizing:border-box}ul[class*=\"bg-zinc-950/5\"]{max-width:100%}#content-area.max-w-5xl{max-width:80rem}#content-area.max-w-xl{max-width:60rem!important}img.max-height-800{max-height:800px!important}img.max-width-80{max-width:80%!important}#navbar .nav-tabs{flex:1 1 auto!important;width:100%!important;justify-content:center!important}"}],"page":{"pagePath":"framework/quickstart","slug":"/framework/quickstart","pageMetadata":{"title":"Quickstart","description":null,"href":"/framework/quickstart","hidden":true},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,..._provideComponents(),...props.components},{CodeBlock,Frame,Heading,Info,OptimizedImage,Step,Steps,Tip,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(_components.p,{children:`In this guide, you’ll learn how to get started with the Writer Framework by building a simple “Hello, World” application. This beginner-friendly guide will help you install the necessary tools, set up an app, and deploy it to the Writer Cloud.`}),`\n`,_jsx(Heading,{level:`2`,id:`step-1-install-writer-framework-and-run-the-demo-app`,children:`Step 1: Install Writer Framework and run the demo app`}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`Writer Framework works on Linux, Mac, and Windows. It supports Python versions 3.9.2 through 3.12. We recommend using a virtual environment.`})}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Python 3.13 is not yet supported.`})}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Install Writer Framework`,children:[_jsxs(_components.p,{children:[`Use the following command to install the Writer Framework using `,_jsx(_components.code,{children:`pip`}),`. Open your command line interface and type:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`pip`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` writer`})]}),`\n`]})})}),_jsx(_components.p,{children:`This will download and install the Writer Framework and all its required dependencies.`})]}),_jsxs(Step,{title:`Test installation with demo application`,children:[_jsx(_components.p,{children:`Once the installation is complete, you can verify that everything is set up correctly by running the built-in demo application. Navigate to your desired directory and type:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`writer`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` hello`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`This command creates a subfolder named `,_jsx(_components.strong,{children:`hello`}),` and launches the Writer Framework, opening a visual editor accessible through a local URL displayed in your command line. This demo app illustrates the different components available in Writer Framework, helping you get familiar with the setup.`]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`step-2-create-a-new-framework-app`,children:`Step 2: Create a new framework app`}),`\n`,_jsxs(_components.p,{children:[`Now that we’ve tested the setup, let’s create our first “Hello, World” app using the `,_jsx(_components.code,{children:`ai-starter`}),` template. This template showcases how quickly you can build AI-powered applications with the Writer Framework.`]}),`\n`,_jsx(_components.p,{children:`Use the following command to generate the app structure:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`writer`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` hello-world`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --template=ai-starter`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`This will create a new app folder, `,_jsx(_components.strong,{children:`hello-world`}),`, with the following structure:`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`main.py`}),` - The entry point for the app. You can import anything you need from here.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`.wf/`}),` - This folder contains the UI component declarations. Maintained by the Writer Framework’s visual editor.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`static/`}),` - This folder contains front-end static files which you might want to distribute with your app, such as images and stylesheets.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-3-start-the-visual-editor`,children:`Step 3: Start the visual editor`}),`\n`,_jsx(_components.p,{children:`To start building and customizing your app visually, use the Writer Framework’s editor. This browser-based interface allows you to drag components, arrange layouts, and modify settings in real-time.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`writer`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` edit`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` hello-world`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`After running this command, you’ll see a local URL displayed in your command line. Open this URL in a web browser to access the editor.`}),`\n`,_jsx(Frame,{caption:`Writer Framework editor opens at https://localhost:4005`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-editor.png?fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=2be4a0fe511cc3244386d117f8139925`,\"data-og-width\":`2880`,width:`2880`,\"data-og-height\":`1534`,height:`1534`,\"data-path\":`framework/images/quickstart/hello-world-editor.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-editor.png?w=280\u0026fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=64bdfbb88892795e44e734ebb8055324 280w, https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-editor.png?w=560\u0026fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=021e4c9da601ea5ccc372c4af00656c7 560w, https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-editor.png?w=840\u0026fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=c260f58560d24929d43a72dbec4465f1 840w, https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-editor.png?w=1100\u0026fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=42955ffd65cda48ebb771b06a1403811 1100w, https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-editor.png?w=1650\u0026fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=dcecfcf0fc56895c51c3a12fa43bee4d 1650w, https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-editor.png?w=2500\u0026fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=8595c37d9f9caee6408a39616ed922dd 2500w`})}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Launch the Editor`,children:[_jsx(_components.p,{children:`In your terminal, enter the following command to open the editor:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`writer`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` edit`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` hello-world`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`This command opens the Writer Framework editor in your browser, where you’ll see a live preview of your app. The editor interface includes a `,_jsx(_components.strong,{children:`component library`}),` on the left, a `,_jsx(_components.strong,{children:`canvas`}),` in the center for building layouts, and a `,_jsx(_components.strong,{children:`settings panel`}),` on the right for customizing selected components.`]}),_jsx(Info,{children:_jsx(_components.p,{children:`The editor starts by default on port 4005. If you launch multiple editors in parallel and do not specify a port, Writer Framework will automatically assign the next port until reaching the limit of 4099.`})}),_jsxs(Warning,{children:[_jsx(_components.p,{children:`It’s not recommended to expose the Framework to the Internet. If you need to access the editor remotely, we recommend setting up an SSH tunnel. By default, requests from non-local origins are rejected as a security measure to protect against drive-by attacks.`}),_jsxs(_components.p,{children:[`If you need to disable this protection, use the flag `,_jsx(_components.code,{children:`--enable-remote-edit`}),`.`]})]})]}),_jsxs(Step,{title:`Add Components to Your Canvas`,children:[_jsxs(_components.p,{children:[`On the left sidebar, browse through the `,_jsx(_components.strong,{children:`Component Library`}),` and try dragging a few components onto the `,_jsx(_components.strong,{children:`Canvas`}),`. For example, you can add a `,_jsx(_components.strong,{children:`Text`}),` component to display “Hello, World!” or try other components to see how they work together.`]}),_jsx(_components.p,{children:`Experiment with arranging these components on the canvas to create a simple layout.`}),_jsx(Frame,{caption:`Writer Framework launches the app at https://localhost:3005`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-preview.png?fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=efd8538a582610e7e070c65c9ea716cf`,\"data-og-width\":`2878`,width:`2878`,\"data-og-height\":`1540`,height:`1540`,\"data-path\":`framework/images/quickstart/hello-world-preview.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-preview.png?w=280\u0026fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=a98d38bbd870eb8afc6da07181724cd2 280w, https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-preview.png?w=560\u0026fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=ff4246304eb559c532676aa3b9406801 560w, https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-preview.png?w=840\u0026fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=28743895e5195bc10c9cad763dfce3e9 840w, https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-preview.png?w=1100\u0026fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=7007122b1b788719343f7fb2d5badd64 1100w, https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-preview.png?w=1650\u0026fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=26c900993c52a619d6c3f61245b81e5d 1650w, https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-preview.png?w=2500\u0026fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=4f5d47c453de22721b98dd2b1fee56ff 2500w`})})]}),_jsxs(Step,{title:`Customize Component Settings`,children:[_jsxs(_components.p,{children:[`With a component selected, look at the `,_jsx(_components.strong,{children:`Settings Panel`}),` on the right side. Here, you can edit properties like text content, colors, and alignment to see how it changes the appearance and behavior of the component on the canvas.`]}),_jsx(_components.p,{children:`This panel allows you to customize components without writing any code, giving you a quick and visual way to build a frontend.`})]}),_jsxs(Step,{title:`Change the App Name in main.py`,children:[_jsxs(_components.p,{children:[`To personalize your app further, open `,_jsx(_components.code,{children:`main.py`}),` in the root of your project folder. Locate the following line:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`wf.init_state({`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"my_app\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"title\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"AI STARTER\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`})`})}),`\n`]})})}),_jsxs(_components.p,{children:[`Change `,_jsx(_components.code,{children:`\"AI STARTER\"`}),` to something unique, like `,_jsx(_components.code,{children:`\"My First Writer App\"`}),`. Save the file, and you’ll see the updated name reflected immediately in the editor.`]}),_jsx(Frame,{caption:`App name updated in the Writer Framework editor`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-app-name.png?fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=d013c1f5ead0a788818488b27ae7ca5e`,\"data-og-width\":`2878`,width:`2878`,\"data-og-height\":`1536`,height:`1536`,\"data-path\":`framework/images/quickstart/hello-world-app-name.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-app-name.png?w=280\u0026fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=70f587967ebb949302fc4b2a999731ca 280w, https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-app-name.png?w=560\u0026fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=f7602f2fe1abe6f7b76c3c9aca3abcad 560w, https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-app-name.png?w=840\u0026fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=90b0261d210fa45792fb7657ae1c0d17 840w, https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-app-name.png?w=1100\u0026fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=77be8416e04d16d0637acf411a35fa72 1100w, https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-app-name.png?w=1650\u0026fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=1452827ac46582754be832d52b9d39c5 1650w, https://mintcdn.com/writer/9jV0H_SSzBim4ReZ/framework/images/quickstart/hello-world-app-name.png?w=2500\u0026fit=max\u0026auto=format\u0026n=9jV0H_SSzBim4ReZ\u0026q=85\u0026s=4a9fae9dc444ec2ef32d4c991fc5565c 2500w`})})]})]}),`\n`,_jsxs(_components.p,{children:[`For now, this simple exploration gives you an idea of how the framework enables rapid frontend building without code. In later tutorials, like creating a `,_jsx(_components.a,{href:`/framework/chat-assistant`,children:`Chat assistant`}),` or a `,_jsx(_components.a,{href:`/framework/social-post-generator`,children:`Social post generator`}),`, you’ll explore more advanced components and layouts using this visual editor.`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-4-run-the-app-locally`,children:`Step 4: Run the app locally`}),`\n`,_jsxs(_components.p,{children:[`When your app is ready, execute the `,_jsx(_components.code,{children:`run`}),` command, which will allow others to run, but not edit, your Framework app.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`writer`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` run`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` hello-world`})]}),`\n`]})})}),`\n`,_jsx(Info,{children:_jsx(_components.p,{children:`Your app starts by default on port 3005. If you launch multiple apps in parallel and do not specify a port, Writer Framework will automatically assign the next port until reaching the limit of 3099.`})}),`\n`,_jsxs(_components.p,{children:[`You can specify a port and host. Specifying `,_jsx(_components.code,{children:`--host 0.0.0.0`}),` enables you to share your application in your local network.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`writer`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` run`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` hello-world`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --port`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 5000`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --host`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0.0.0.0`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`conclusion`,children:`Conclusion`}),`\n`,_jsxs(_components.p,{children:[`Congratulations! You’ve set up and configured your first app with the Writer Framework. Now, try building a `,_jsx(_components.a,{href:`/framework/chat-assistant`,children:`Chat assistant`}),` or a `,_jsx(_components.a,{href:`/framework/social-post-generator`,children:`Social post generator`}),` to put these skills into action.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{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":"Quickstart","description":null,"href":"/framework/quickstart","hidden":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Step 1: Install Writer Framework and run the demo app","slug":"step-1-install-writer-framework-and-run-the-demo-app","depth":2,"children":[]},{"title":"Step 2: Create a new framework app","slug":"step-2-create-a-new-framework-app","depth":2,"children":[]},{"title":"Step 3: Start the visual editor","slug":"step-3-start-the-visual-editor","depth":2,"children":[]},{"title":"Step 4: Run the app locally","slug":"step-4-run-the-app-locally","depth":2,"children":[]},{"title":"Conclusion","slug":"conclusion","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"writer","siteName":"Writer AI Studio","title":"Quickstart - Writer AI Studio","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-28T23:48:06.764Z","originalFileLocation":"framework/quickstart.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=\"Writer AI Studio developer documentation - Build AI agents with APIs, SDKs, Agent Builder, and no-code tools. Integrate generative AI into your applications.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Writer AI Studio\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/writer/rBMYB50U__7D_mBT/_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/writer/rBMYB50U__7D_mBT/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/writer/rBMYB50U__7D_mBT/_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/writer/rBMYB50U__7D_mBT/_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/writer/rBMYB50U__7D_mBT/_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/writer/rBMYB50U__7D_mBT/_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/writer/rBMYB50U__7D_mBT/_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/writer/rBMYB50U__7D_mBT/_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/writer/rBMYB50U__7D_mBT/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Quickstart - Writer AI Studio\">\u003cmeta data-mint-head property=\"og:description\" content=\"Writer AI Studio developer documentation - Build AI agents with APIs, SDKs, Agent Builder, and no-code tools. Integrate generative AI into your applications.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Writer AI Studio Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://dev.writer.com/framework/quickstart\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://writer.mintlify.app/_mintlify/api/og/v2?division=Getting+started\u0026amp;title=Quickstart\u0026amp;theme=9c7f3bd87cb846f8ead27220\u0026amp;signature=345eb363bc3be82ad88fac6c49b5705602f3e4d63e8c5c38b0b075f6bb302c1c\">\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=\"Quickstart - Writer AI Studio\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Writer AI Studio developer documentation - Build AI agents with APIs, SDKs, Agent Builder, and no-code tools. Integrate generative AI into your applications.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://writer.mintlify.app/_mintlify/api/og/v2?division=Getting+started\u0026amp;title=Quickstart\u0026amp;theme=9c7f3bd87cb846f8ead27220\u0026amp;signature=345eb363bc3be82ad88fac6c49b5705602f3e4d63e8c5c38b0b075f6bb302c1c\">\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/writer/rBMYB50U__7D_mBT/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Writer AI Studio\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#BFCBFF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://dev.writer.com/framework/quickstart\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/framework/quickstart.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://dev.writer.com/#organization\",\"name\":\"Writer AI Studio\",\"url\":\"https://dev.writer.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/writer/YZ72OUP7BQyK8p2G/logo/writer_logo_light.svg?fit=max\u0026auto=format\u0026n=YZ72OUP7BQyK8p2G\u0026q=85\u0026s=c9a784871f9b98724bb1eae947e745ed\"}},{\"@type\":\"WebSite\",\"@id\":\"https://dev.writer.com#website\",\"name\":\"Writer AI Studio\",\"url\":\"https://dev.writer.com\",\"publisher\":{\"@id\":\"https://dev.writer.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://dev.writer.com/framework/quickstart#webpage\",\"url\":\"https://dev.writer.com/framework/quickstart\",\"name\":\"Quickstart\",\"dateModified\":\"2026-10-28T23:48:06.764Z\",\"isPartOf\":{\"@id\":\"https://dev.writer.com#website\"},\"breadcrumb\":{\"@id\":\"https://dev.writer.com/framework/quickstart#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://dev.writer.com/framework/quickstart#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Getting started\",\"item\":\"https://dev.writer.com/framework/introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Quickstart\",\"item\":\"https://dev.writer.com/framework/quickstart\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://dev.writer.com/framework/quickstart#article\",\"headline\":\"Quickstart\",\"name\":\"Quickstart\",\"url\":\"https://dev.writer.com/framework/quickstart\",\"mainEntityOfPage\":{\"@id\":\"https://dev.writer.com/framework/quickstart#webpage\"},\"dateModified\":\"2026-10-28T23:48:06.764Z\",\"publisher\":{\"@id\":\"https://dev.writer.com/#organization\"},\"isPartOf\":{\"@id\":\"https://dev.writer.com#website\"}}]}\u003c/script>","siteName":"Writer AI Studio","nav":{"global":null,"tabs":[{"tab":"Home","icon":"house","pages":[{"title":"Home","href":"/home/introduction"}]},{"tab":"Writer Framework","icon":"shapes","hidden":true,"groups":[{"group":"Getting started","pages":[{"title":"Writer Framework","sidebarTitle":"Introduction","description":null,"href":"/framework/introduction"},{"title":"Quickstart","href":"/framework/quickstart"},{"title":"Writer AI module","description":null,"href":"/framework/ai-module"},{"title":"Sample app library","mode":"wide","description":null,"href":"/framework/sample-apps"}]},{"group":"Guides","pages":[{"title":"Application state","description":null,"href":"/framework/application-state"},{"title":"Backend-initiated actions","description":null,"href":"/framework/backend-initiated-actions"},{"title":"Builder basics","description":null,"href":"/framework/builder-basics"},{"title":"Dataframe","description":null,"href":"/framework/dataframe"},{"title":"Event handlers","description":null,"href":"/framework/event-handlers"},{"title":"Handling inputs","description":null,"href":"/framework/handling-inputs"},{"title":"Repeater","description":null,"href":"/framework/repeater"}]},{"group":"Tutorials","pages":[{"title":"Social post generator","description":null,"href":"/framework/social-post-generator"},{"title":"Chat assistant","description":null,"href":"/framework/chat-assistant"},{"title":"Product description generator","description":null,"href":"/framework/product-description-generator"},{"title":"Release notes generator","description":null,"href":"/framework/release-notes-generator"}]},{"group":"Advanced","pages":[{"title":"Authentication","description":null,"href":"/framework/authentication"},{"title":"SEO and social sharing","mode":"wide","description":null,"href":"/framework/seo"},{"title":"Backend-driven UI","description":null,"href":"/framework/backend-driven-ui"},{"title":"Custom components","description":null,"href":"/framework/custom-components"},{"title":"Custom server","description":null,"href":"/framework/custom-server"},{"title":"Frontend scripts","description":null,"href":"/framework/frontend-scripts"},{"title":"Page routes","description":null,"href":"/framework/page-routes"},{"title":"Sessions","description":null,"href":"/framework/sessions"},{"title":"State schema","description":null,"href":"/framework/state-schema"},{"title":"Stylesheets","description":null,"href":"/framework/stylesheets"},{"title":"Testing","description":null,"href":"/framework/testing"}]},{"group":"Component reference","pages":[{"group":"Layout","pages":[{"title":"Column","description":null,"href":"/components/column"},{"title":"Column Container","description":null,"href":"/components/columns"},{"title":"Horizontal Stack","description":null,"href":"/components/horizontalstack"},{"title":"Section","description":null,"href":"/components/section"},{"title":"Separator","description":null,"href":"/components/separator"},{"title":"Sidebar","description":null,"href":"/components/sidebar"},{"title":"Step","description":null,"href":"/components/step"},{"title":"Step Container","description":null,"href":"/components/steps"},{"title":"Tab","description":null,"href":"/components/tab"},{"title":"Tab Container","description":null,"href":"/components/tabs"}]},{"group":"Content","pages":[{"title":"Annotated Text","description":null,"href":"/components/annotatedtext"},{"title":"Chatbot","description":null,"href":"/components/chatbot"},{"title":"DataFrame","description":null,"href":"/components/dataframe"},{"title":"Heading","description":null,"href":"/components/heading"},{"title":"Image","description":null,"href":"/components/image"},{"title":"JSON Viewer","description":null,"href":"/components/jsonviewer"},{"title":"Link","description":null,"href":"/components/link"},{"title":"Message","description":null,"href":"/components/message"},{"title":"Metric","description":null,"href":"/components/metric"},{"title":"Plotly Graph","description":null,"href":"/components/plotlygraph"},{"title":"Progress Bar","description":null,"href":"/components/progressbar"},{"title":"Tags","description":null,"href":"/components/tags"},{"title":"Text","description":null,"href":"/components/text"},{"title":"Video Player","description":null,"href":"/components/videoplayer"}]},{"group":"Input","pages":[{"title":"Checkbox Input","description":null,"href":"/components/checkboxinput"},{"title":"Date Input","description":null,"href":"/components/dateinput"},{"title":"File Input","description":null,"href":"/components/fileinput"},{"title":"Number Input","description":null,"href":"/components/numberinput"},{"title":"Radio Input","description":null,"href":"/components/radioinput"},{"title":"Slider Range Input","description":null,"href":"/components/rangeinput"},{"title":"Rating Input","description":null,"href":"/components/ratinginput"},{"title":"Select Input","description":null,"href":"/components/selectinput"},{"title":"Slider Input","description":null,"href":"/components/sliderinput"},{"title":"Switch Input","description":null,"href":"/components/switchinput"},{"title":"Text area Input","description":null,"href":"/components/textareainput"},{"title":"Text Input","description":null,"href":"/components/textinput"},{"title":"Time Input","description":null,"href":"/components/timeinput"}]},{"group":"Other","pages":[{"title":"Button","description":null,"href":"/components/button"},{"title":"HTML Element","description":null,"href":"/components/html"},{"title":"Pagination","description":null,"href":"/components/pagination"},{"title":"Repeater","description":null,"href":"/components/repeater"},{"title":"Reuse Component","description":null,"href":"/components/reuse"},{"title":"Timer","description":null,"href":"/components/timer"}]},{"group":"Embed","pages":[{"title":"PDF","description":null,"href":"/components/pdf"},{"title":"IFrame","description":null,"href":"/components/iframe"}]}]}]},{"tab":"API Reference","icon":"key","pages":[{"title":"API Reference","href":"/api-reference/api-keys"}]},{"tab":"Legacy API Reference","hidden":true,"pages":[{"title":"Legacy API Reference","href":"/api-reference-legacy/billing/get-your-organization-subscription-details"}]}]},"basePath":"","title":"Quickstart - Writer AI Studio","buildId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","deploymentId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","dynamics":["07c022d89b","a74be98ba7","a9bb46feb3"],"chunks":["Frame-Bpq2Z6jK.js","DynamicMarkdown-D5M2At0B.js","zoom-image-lightbox-DL4wrF0w.js","lightbox-handle-r17bVUz3.js","Markdown-D7QRHV3m.js","clsx-D1Z-ELXV.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-lvhuD9Du.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CKfC4ywL.js"]}