(function(){const posthogKey = "phc\_oMfVwfGjzwkE5n7cCaDf25rTm7WaYn8rH4FnvsVq57Zb"; const posthogHost = "https://i.buildy.so"; const forceAnalytics = false; const analyticsHosts = \["buildy.so","www.buildy.so","usecharming.com","www.usecharming.com"\]; const analyticsIdCookie = "charming\_marketing\_identity\_seen"; const legacyAnalyticsIdCookie = "buildy\_marketing\_identity\_seen"; const analyticsIdCookieMaxAgeSeconds = 31536000; !function(t,e){var o,n,p,r;e.\_\_SV||(window.posthog && window.posthog.\_\_loaded)||(window.posthog=e,e.\_i=\[\],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t\[o\[0\]\],e=o\[1\]),t\[e\]=function(){t.push(\[e\].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api\_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")\[0\]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e\[a\]=\[\]:a="posthog",u.people=u.people||\[\],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="init os ds Ie us vs ss ls capture calculateEventProperties register register\_once register\_for\_session unregister unregister\_for\_session ws getFeatureFlag getFeatureFlagPayload getFeatureFlagResult isFeatureEnabled reloadFeatureFlags updateFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSurveysLoaded onSessionId getSurveys getActiveMatchingSurveys renderSurvey displaySurvey cancelPendingSurvey canRenderSurvey canRenderSurveyAsync identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset get\_distinct\_id getGroups get\_session\_id get\_session\_replay\_url alias set\_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException startExceptionAutocapture stopExceptionAutocapture loadToolbar get\_property getSessionProperty bs ps createPersonProfile setInternalOrTestUser ys es $s opt\_in\_capturing opt\_out\_capturing has\_opted\_in\_capturing has\_opted\_out\_capturing get\_explicit\_consent\_status is\_capturing clear\_opt\_in\_out\_capturing cs debug M gs getPageViewId captureTraceFeedback captureTraceMetric Qr".split(" "),n=0;n<o.length;n++)g(u,o\[n\]);e.\_i.push(\[i,s,a\])},e.\_\_SV=1)}(document,window.posthog||\[\]); var h = window.location.hostname; if (forceAnalytics || analyticsHosts.indexOf(h) !== -1) { const hashParams = new URLSearchParams(window.location.hash.substring(1)); const productDistinctId = hashParams.get('distinct\_id'); const productSessionId = hashParams.get('session\_id'); const productBootstrap = productDistinctId && productSessionId ? { distinctID: productDistinctId, sessionID: productSessionId } : null; let markerDistinctId = null; if (!productBootstrap) { const markerIdPattern = /^\[0-9a-f\]{8}-\[0-9a-f\]{4}-\[0-9a-f\]{4}-\[0-9a-f\]{4}-\[0-9a-f\]{12}$/i; var markerUsedLegacy = false; for (const markerName of \[analyticsIdCookie, legacyAnalyticsIdCookie\]) { const markerPrefix = markerName + '='; const markerCookie = document.cookie .split(';') .map(function (part) { return part.trim(); }) .find(function (part) { return part.startsWith(markerPrefix); }); if (!markerCookie) continue; try { const value = decodeURIComponent(markerCookie.slice(markerPrefix.length)); if (markerIdPattern.test(value)) { markerDistinctId = value; markerUsedLegacy = markerName === legacyAnalyticsIdCookie; break; } } catch {} } } const bootstrap = productBootstrap ?? (markerDistinctId ? { distinctID: markerDistinctId } : null); posthog.init(posthogKey, { api\_host: posthogHost, defaults: '2026-01-30', ...(bootstrap ? { bootstrap } : {}), loaded: function (ph) { const distinctId = ph.get\_distinct\_id(); if (typeof distinctId !== 'string') return; if (markerUsedLegacy) { ph.capture('legacy\_state\_key\_observed', { key: legacyAnalyticsIdCookie }); } try { localStorage.setItem(analyticsIdCookie, distinctId); localStorage.removeItem(legacyAnalyticsIdCookie); } catch {} document.cookie = analyticsIdCookie + '=' + encodeURIComponent(distinctId) + '; Path=/; Max-Age=' + analyticsIdCookieMaxAgeSeconds + '; SameSite=Lax' + (window.location.protocol === 'https:' ? '; Secure' : ''); document.cookie = legacyAnalyticsIdCookie + '=; Path=/; Max-Age=0; SameSite=Lax' + (window.location.protocol === 'https:' ? '; Secure' : ''); }, }); } })();(function(){const ga4Id = "G-XG5Q0M59CD"; const forceAnalytics = false; const analyticsHosts = \["buildy.so","www.buildy.so","usecharming.com","www.usecharming.com"\]; var h = window.location.hostname; if (forceAnalytics || analyticsHosts.indexOf(h) !== -1) { window.dataLayer = window.dataLayer || \[\]; function gtag() { window.dataLayer.push(arguments); } window.gtag = gtag; gtag('consent', 'default', { ad\_storage: 'denied', ad\_user\_data: 'denied', ad\_personalization: 'denied', analytics\_storage: 'granted', }); gtag('js', new Date()); gtag('config', ga4Id); var s = document.createElement('script'); s.async = true; s.src = 'https://www.googletagmanager.com/gtag/js?id=' + ga4Id; document.head.appendChild(s); } })(); (function () { function setThemeColorMetas(theme) { var light = document.querySelector('meta\[data-theme-color="light"\]'); var dark = document.querySelector('meta\[data-theme-color="dark"\]'); if (light) light.setAttribute('media', theme === 'light' ? 'all' : 'not all'); if (dark) dark.setAttribute('media', theme === 'dark' ? 'all' : 'not all'); } try { var stored = localStorage.getItem('charming-theme'); if (stored === 'dark' || stored === 'light') { document.documentElement.setAttribute('data-theme', stored); setThemeColorMetas(stored); } } catch (\_err) { // Storage can be unavailable (private mode, disabled) — fall back to // the media query, same as a first-time visitor. } })(); Charming — Build and host apps with any AI{"@context":"https://schema.org","@graph":\[{"@type":"Organization","@id":"https://usecharming.com/#org","name":"Charming","url":"https://usecharming.com/","logo":"https://usecharming.com/charming-mark.svg","contactPoint":\[{"@type":"ContactPoint","contactType":"customer support","email":"support@usecharming.com","availableLanguage":\["English"\]},{"@type":"ContactPoint","contactType":"legal","email":"legal@usecharming.com","availableLanguage":\["English"\]}\],"address":{"@type":"PostalAddress","addressCountry":"US"},"sameAs":\["https://chatgpt.com/apps/buildy/asdk\_app\_69f9215e800881919f3d96d79200a35a","https://github.com/tambo-labs/charming-mcp","https://x.com/tambo\_ai"\]},{"@type":"WebSite","@id":"https://usecharming.com/#website","name":"Charming","url":"https://usecharming.com/","publisher":{"@id":"https://usecharming.com/#org"}},{"@type":"SoftwareApplication","@id":"https://usecharming.com/#software","name":"Charming","url":"https://usecharming.com/","applicationCategory":"DeveloperApplication","operatingSystem":"Web","description":"A home for the apps your AI builds for you. Each app gets a real URL, remembers its data, and stays live.","installUrl":"https://chatgpt.com/apps/buildy/asdk\_app\_69f9215e800881919f3d96d79200a35a","sameAs":\["https://chatgpt.com/apps/buildy/asdk\_app\_69f9215e800881919f3d96d79200a35a"\],"offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"publisher":{"@id":"https://usecharming.com/#org"},"audience":{"@type":"Audience","audienceType":"Consumer"}},{"@type":"Service","@id":"https://usecharming.com/#service","name":"Charming app hosting","url":"https://usecharming.com/","provider":{"@id":"https://usecharming.com/#org"},"serviceType":"AI-built web app hosting","areaServed":"Worldwide","audience":{"@type":"Audience","audienceType":"Consumer"},"description":"Charming hosts AI-built web apps with a real URL and a database, so any AI can use and update them anytime.","offers":{"@type":"Offer","price":"0","priceCurrency":"USD"}},{"@type":"BreadcrumbList","@id":"https://usecharming.com/#breadcrumb","itemListElement":\[{"@type":"ListItem","position":1,"name":"Charming","item":"https://usecharming.com/"},{"@type":"ListItem","position":2,"name":"Home","item":"https://usecharming.com/"}\]},{"@type":"FAQPage","@id":"https://usecharming.com/#faq","mainEntity":\[{"@type":"Question","name":"What is Charming?","acceptedAnswer":{"@type":"Answer","text":"Charming turns ideas you describe in chat into real, hosted web apps with their own URL and a database, so any AI can use and update them later."}},{"@type":"Question","name":"How do I build an app with Charming?","acceptedAnswer":{"@type":"Answer","text":"Ask any AI to build it: ChatGPT, Claude, or a coding agent. Charming gives the AI a way to create the app, give it a real URL, and store its data."}},{"@type":"Question","name":"Do my apps keep running when I'm not chatting?","acceptedAnswer":{"@type":"Answer","text":"Yes. Each Charming app has its own URL and persistent storage. You can open it later in a browser, on your phone, or from a different AI chat and the data is still there."}},{"@type":"Question","name":"Can other AIs use a Charming app I created?","acceptedAnswer":{"@type":"Answer","text":"Yes. Charming apps are AI-ready: any AI that supports MCP, or that can make HTTP calls, can read and update the data in your app."}},{"@type":"Question","name":"How much does Charming cost?","acceptedAnswer":{"@type":"Answer","text":"You can build and host Charming apps for free during the open preview. No signup is required to try one of the starter apps."}}\]},{"@type":"WebPage","@id":"https://usecharming.com/#webpage","url":"https://usecharming.com/","name":"Charming — Build and host apps with any AI","isPartOf":{"@id":"https://usecharming.com/#website"},"about":{"@id":"https://usecharming.com/#software"},"primaryImageOfPage":"https://usecharming.com/og-image.png","speakable":{"@type":"SpeakableSpecification","cssSelector":\["h1","h2","\[data-speakable\]"\]}}\]}

[![Charming](/charming-lockup.svg)![Charming](/charming-lockup-dark.svg)](/)

[Ideas](/#apps)[Pricing](/#pricing)[For Work](/work/)[Blog](/blog/)[Docs](/docs/)

[Sign up](https://charm.ing/auth/signup)

[Ideas](/#apps)[Pricing](/#pricing)[For Work](/work/)[Blog](/blog/)[Docs](/docs/)

var e=document.querySelector(\`\[data-nav-menu\]\`);e&&(e.querySelectorAll(\`a\`).forEach(t=>{t.addEventListener(\`click\`,()=>{e.open=!1})}),document.addEventListener(\`pointerdown\`,t=>{e.open&&!e.contains(t.target)&&(e.open=!1)}),document.addEventListener(\`keydown\`,t=>{t.key===\`Escape\`&&e.open&&(e.open=!1,e.querySelector(\`summary\`)?.focus())}));

# Software that’s finally _yours._

Make apps with your favorite agent. Use them anywhere and share them with friends.

astro-island,astro-slot,astro-static-slot{display:contents}(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event("astro:load"));})();(()=>{var g=Object.defineProperty;var w=(a,s,c)=>s in a?g(a,s,{enumerable:!0,configurable:!0,writable:!0,value:c}):a\[s\]=c;var l=(a,s,c)=>w(a,typeof s!="symbol"?s+"":s,c);var E=new Set(\["\_\_proto\_\_","constructor","prototype"\]);{let a={0:t=>y(t),1:t=>c(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(c(t)),5:t=>new Set(c(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>Number.POSITIVE\_INFINITY\*t},s=t=>{let\[p,e\]=t;return p in a?a\[p\](e):void 0},c=t=>t.map(s),y=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map((\[p,e\])=>\[p,s(e)\]));class f extends HTMLElement{constructor(){super(...arguments);l(this,"Component");l(this,"hydrator");l(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island\[ssr\]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let r=this.querySelectorAll("astro-slot"),n={},d=this.querySelectorAll("template\[data-astro-template\]");for(let o of d){let i=o.closest(this.tagName);i!=null&&i.isSameNode(this)&&(n\[o.getAttribute("data-astro-template")||"default"\]=o.innerHTML,o.remove())}for(let o of r){let i=o.closest(this.tagName);i!=null&&i.isSameNode(this)&&(n\[o.getAttribute("name")||"default"\]=o.innerHTML)}let u;try{u=this.hasAttribute("props")?y(JSON.parse(this.getAttribute("props"))):{}}catch(o){let i=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(i+=\` (export ${v})\`),console.error(\`\[hydrate\] Error parsing props for component ${i}\`,this.getAttribute("props"),o),o}let h;await this.hydrator(this)(this.Component,u,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});l(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),r.disconnect(),this.childrenConnectedCallback()},r=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT\_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});r.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}getRetryImportUrl(e){let r=new URL(e,document.baseURI);return r.searchParams.set("astro-retry",Date.now().toString()),r.toString()}async importWithRetry(e){try{return await import(e)}catch(r){return await new Promise(n=>setTimeout(n,1e3)),import(this.getRetryImportUrl(e))}}handleHydrationError(e){let r=this.getAttribute("component-url"),n=new CustomEvent("astro:hydration-error",{cancelable:!0,bubbles:!0,composed:!0,detail:{error:e,componentUrl:r}});this.dispatchEvent(n)&&console.error(\`\[astro-island\] Error hydrating ${r}\`,e)}async start(){let e=JSON.parse(this.getAttribute("opts")),r=this.getAttribute("client");if(Astro\[r\]===void 0){window.addEventListener(\`astro:${r}\`,()=>this.start(),{once:!0});return}try{await Astro\[r\](async()=>{let n=this.getAttribute("renderer-url");try{let\[d,{default:u}\]=await Promise.all(\[this.importWithRetry(this.getAttribute("component-url")),n?this.importWithRetry(n):Promise.resolve({default:()=>()=>{}})\]),h=this.getAttribute("component-export")||"default";if(h.includes(".")){this.Component=d;for(let m of h.split(".")){if(E.has(m)||!this.Component||typeof this.Component!="object"&&typeof this.Component!="function"||!Object.hasOwn(this.Component,m))throw new Error(\`Invalid component export path: ${h}\`);this.Component=this.Component\[m\]}}else{if(E.has(h))throw new Error(\`Invalid component export path: ${h}\`);this.Component=d\[h\]}return this.hydrator=u,this.hydrate}catch(d){return this.handleHydrationError(d),()=>{}}},e,this)}catch(n){this.handleHydrationError(n)}}attributeChangedCallback(){this.hydrate()}}l(f,"observedAttributes",\["props"\]),customElements.get("astro-island")||customElements.define("astro-island",f)}})();

Add to an AI Chat

![](/logos/claude-code.png)![](/logos/codex.svg)![](/logos/cursor.svg)Copy Prompt

![](/logos/claude.svg)ClaudeToday

You · 9:41 AM

build me an app to track my workouts

Claude · 9:42 AM

Done. Your **Workout Tracker** is live. Tell me a workout any time and I’ll log it.

charm.ing/you/workout-tracker— live now, open it anytime

WWorkout TrackerProgressLogPRs

**12**day streak

This week

5

workouts

Volume (lb)

42.3k

↑ 8%

Bench PR

175

↑ 25 lb

**Bench press · 8 weeks**150 → 175 lb

+Write a message…

Works with

![](/logos/chatgpt.svg)ChatGPT![](/logos/claude.svg)Claude![](/logos/claude-code.png)Claude Code![](/logos/cursor.svg)Cursor![](/logos/codex.svg)Codex![](/logos/gemini.svg)Gemini![](/logos/grok.svg)Grok![](/logos/perplexity.svg)Perplexity![](/logos/openclaw.svg)OpenClaw![](/logos/goose.png)Goose

## One sentence in chat becomes _a real app._

01

### Connect it to your AI

Add Charming to ChatGPT, Claude, or any agent with one click or one prompt.

02

### Ask for what you want

Describe the app in plain language. Your agent builds it on Charming.

03

### Use it anywhere

The app lives at its own URL and keeps its data. Open it in a browser, share it, or ask any agent to change it.

## A real app you and your agent _keep updated._

Add to it from your phone, or tell your agent. It’s the same app either way.

Run Log · one appcharm.ing/you/run-log

In the app

RRun LogJuly

July so far15.5 mi

4.23.15.03.2Jul 2Jul 4Jul 6Today

Today

3.2 mi

9:41/mi

Jul 6

5.0 mi

9:58/mi

Jul 4

3.1 mi

9:47/mi

Jul 2

4.2 mi

10:05/mi

Add entry

Or ask your agent

Your chat

log today’s run, 3.2 miles

Saved to your **Run Log**:Today·3.2 mi·9:41/miThat’s your fastest 5K-ish run this month.

what was my pace on the 4th?

**9:47/mi**, over 3.1 miles.

✓Today3.2 mi9:41/mi saved once, either way.

## Built by the agent that already _knows you._

So it arrives with your details already filled in.

![](/logos/chatgpt.svg)ChatGPTToday

You

what should I build?

ChatGPT · remembered your context

Based on your recent chats about a **home remodel**, here’s a budget app.

charm.ing/you/reno-budget— live now, open it anytime

RReno BudgetBudgetRooms

Total

$24,800

Spent

$18,650

Remaining

$6,150

75% of budget spent$6,150 left

Kitchen remodelKitchen$24,800

Contractor estimateLabor$18,650

+Ask ChatGPT

## Share it with _anyone._

Invite anyone by email as a viewer or editor. They can use their own agent or a browser.

KKyoto TripItineraryMapBudget

4 daysKyoto · Nara3 people planning

Sat · Oct 12

Land KIX, train to Kyoto Station

Check in at Gion ryokan

![](/logos/claude.svg)**You** · Claude

Sun · Oct 13

Fushimi Inari at sunrise

SNishiki Market lunch, the uni stall

![](/logos/chatgpt.svg)**Sam** · ChatGPT

Mon · Oct 14

Arashiyama bamboo grove + monkey park

DRiverside teahouse after the monkey park

**Dana** · Just the app

Tue · Oct 15

Day trip: Nara deer park

Deer crackers, Tōdai-ji, back by dinner

You![](/logos/claude.svg)Claude

Sam![](/logos/chatgpt.svg)ChatGPT

Dana Just the app

## Other AI apps come with _strings attached._

What you usually get

*   Claude ArtifactsTied to Claude, not a standalone app you own
*   Codex SitesHosting is limited to Business & Enterprise plans

A Charming app

*   Works with any AI
*   Available on every plan
*   A real app at its own URL
*   Yours to keep and share

## Open one someone _already built._

Every one is live, shared, and remixable. Use it as-is, or ask your AI to make it yours.

[HHydrationTodayHistory6/ 8 cups9-day streak48 oz today · 2 cups to go**Hydration.** Track water against a daily goal.learn more →](/apps/hydration/)[MMealsTodayWeek_M__T__W__T__F__S__S_P 128gC 210gF 62gToday1,840 _/ 2,200 kcal_Greek yogurt + granola410Chicken burrito bowl720Salmon + rice710**Meals.** Log meals; your agent fills in the calories.learn more →](/apps/meals/)[FFlashcardsReviewDecksla madrugadathe early morning · 12 due todaySpanish · B1 mastery68%**Flashcards.** Spaced-repetition decks your agent fills in bulk.learn more →](/apps/flashcards/)[WWatchlistSeenQueuePL★★★★★Past LivesDP★★★★★Dune: Part TwoA★★★★★AftersunZIQueuedThe Zone of Interest**Watchlist.** What you’ve seen and want to see, with your ratings.learn more →](/apps/watchlist/)[SSplitReceiptPeopleCasa Bonita · Jul 5$86.40Carnitas tacosSam$18.00Margarita pitcher×4$32.00ChurrosAlex$9.60you’re owed **$34.20** of $86.40**Split.** Your agent reads the receipt, then you assign the items.learn more →](/apps/split/)[LLiftLogPRsDeadlift · 3×5PR315 lbSquat · 5×5245 lbBench · 3×8185 lb**Weekly volume**↑ 12%**Lift.** Log lifts, sets, reps, and weekly volume.learn more →](/apps/lift/)

## Free for _personal apps._

Build and use your own apps for free. We don’t sell your data or train AI on it.

Personal

Free

What’s included

*   Unlimited apps
*   Hosted at charm.ing/you
*   Share & remix
*   Works in Claude, ChatGPT & more

[Fair use applies](/fair-use/)

Add to an AI Chat

![](/logos/claude-code.png)![](/logos/codex.svg)![](/logos/cursor.svg)Copy Prompt

For work

A secure home for the apps your team builds.

Your team is already asking agents to build tools. Keep those apps in one place, under your control.

What’s included

*   Single sign-on
*   Roles and permissions on every app
*   An admin view of every app your team builds
*   White-label on your own domain

[Learn more about Work](/work/)

## Frequently Asked _Questions._

What is Charming?+–

Describe an app in any chat. Charming publishes it to a real URL with a database, so you can share and keep using it.

Do I need to be technical?+–

No. You describe what you want in plain language, and your AI builds and publishes it to Charming.

Does it work with my AI?+–

Yes. ChatGPT, Claude, Cursor, Codex, and any agent that can browse or make web requests.

Can I control who sees my app?+–

Yes. Invite specific people as viewers or editors, and revoke access anytime.

Do my apps keep running when I'm not chatting?+–

Yes. The app stays live at its URL. You and your AI can pick it back up whenever.

How much does it cost?+–

Charming is free for personal use. For teams and companies, [Charming for Work](/work/) adds single sign-on, roles, and an admin view.

## Give your agent somewhere _to build._

Your first app takes one sentence.

(()=>{var a=(s,i,o)=>{let r=async()=>{await(await s())()},t=typeof i.value=="object"?i.value:void 0,c={rootMargin:t==null?void 0:t.rootMargin},n=new IntersectionObserver(e=>{for(let l of e)if(l.isIntersecting){n.disconnect(),r();break}},c);for(let e of o.children)n.observe(e)};(self.Astro||(self.Astro={})).visible=a;window.dispatchEvent(new Event("astro:visible"));})();

Add to an AI Chat

![](/logos/claude-code.png)![](/logos/codex.svg)![](/logos/cursor.svg)Copy Prompt

[](/)

Software that’s finally yours.

[Up and running](https://status.usecharming.com "System status. Opens status.usecharming.com")

## Product

*   [Overview](/)
*   [How it works](/how-it-works/)
*   [Pricing](/#pricing)
*   [For Work](/work/)
*   [Blog](/blog/)

## Works with

*   [ChatGPT](https://chatgpt.com/apps/buildy/asdk_app_69f9215e800881919f3d96d79200a35a)
*   [Claude](https://charm.ing/docs/guides/setup-claude)
*   [Gemini](https://charm.ing/docs/guides/setup-gemini)
*   [Grok](https://charm.ing/docs/guides/setup-grok)
*   [Perplexity](https://charm.ing/docs/guides/setup-perplexity)

## Resources

*   [Docs](/docs/)
*   [Guides](/guides/)
*   [Contact](/contact-us/)
*   [llms.txt](/llms.txt)
*   [Email us](mailto:support@usecharming.com)

## Legal

*   [Privacy](/privacy/)
*   [Terms](/terms/)
*   [Fair use](/fair-use/)
*   [Subprocessors](/subprocessors/)

© 2026 Charming

charm.ing

var e=document.documentElement,t=window.matchMedia(\`(prefers-color-scheme: dark)\`),n=()=>{let n=e.getAttribute(\`data-theme\`);return n===\`light\`||n===\`dark\`?n:t.matches?\`dark\`:\`light\`},r=document.querySelector(\`\[data-theme-toggle\]\`),i=()=>{if(!r)return;let e=n()===\`dark\`?\`light\`:\`dark\`;r.setAttribute(\`aria-label\`,\`Switch to ${e} theme\`)};i();var a=e=>{let t=document.querySelector(\`meta\[data-theme-color="light"\]\`),n=document.querySelector(\`meta\[data-theme-color="dark"\]\`);t?.setAttribute(\`media\`,e===\`light\`?\`all\`:\`not all\`),n?.setAttribute(\`media\`,e===\`dark\`?\`all\`:\`not all\`)};r?.addEventListener(\`click\`,()=>{let t=n()===\`dark\`?\`light\`:\`dark\`;e.setAttribute(\`data-theme\`,t),a(t);try{localStorage.setItem(\`charming-theme\`,t)}catch{}i()}),t.addEventListener(\`change\`,()=>{e.hasAttribute(\`data-theme\`)||i()});