Class Central is learner-supported. When you buy through links on our site, we may earn an affiliate commission.

Treehouse

AI Chatbot Comparison: Google Bard, Bing AI, Claude, ChatGPT Course

via Treehouse

Overview

Limited-Time Offer: Up to 75% Off Coursera Plus!
7000+ certificate courses from Google, Microsoft, IBM, and many more.

Step into the exciting world of chatbots amplified by large language models! This course aims to provide practical insights and a solid foundation in understanding and working with AI chatbots. We’ll compare four major platforms—Google Bard, Bing AI, Anthropic's Claude, and OpenAI's ChatGPT—and we’ll look at the fundamental concepts, capabilities, and limitations of each platform.

What you'll learn

  • Introduction to Chatbots Powered by Large Language Models
  • Overview of Google Bard, Bing AI, Anthropic’s Claude, and OpenAI's ChatGPT
  • Comparative Analysis of Chatbot Technologies
  • Practical Applications and Limitations

Syllabus

Treehouse: HTML, CSS, PHP, JS, and Python Development Courseswindow.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","errorBeacon":"bam.nr-data.net","licenseKey":"d98036d1cc","applicationID":"1824378","transactionName":"cQ5eRRQNCQ8BFhZUXlATUUMfTQwNAAFB","queueTime":0,"applicationTime":529,"agent":""}(window.NREUM||(NREUM={})).init={privacy:{cookies_enabled:true},ajax:{deny_list:[]}};(window.NREUM||(NREUM={})).loader_config={xpid:"VwIBVldWGwIIVlVRAAk=",licenseKey:"d98036d1cc",applicationID:"1824378"};;/*! For license information please see nr-loader-full-1.253.0.min.js.LICENSE.txt */ (()=>{var e,t,r={234:(e,t,r)=>{"use strict";r.d(t,{P_:()=>v,Mt:()=>b,C5:()=>s,DL:()=>A,OP:()=>D,lF:()=>O,Yu:()=>E,Dg:()=>m,CX:()=>c,GE:()=>w,sU:()=>C});var n=r(8632),o=r(9567);const i={beacon:n.ce.beacon,errorBeacon:n.ce.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},a={};function s(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!a[e])throw new Error("Info for ".concat(e," was never set"));return a[e]}function c(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,o.D)(t,i);const r=(0,n.ek)(e);r&&(r.info=a[e])}const d=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var u=r(7056),l=r(50);const f="[data-nr-mask]",h=()=>{const e={mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{feature_flags:[],proxy:{assets:void 0,beacon:void 0},privacy:{cookies_enabled:!0},ajax:{deny_list:void 0,block_internal:!0,enabled:!0,harvestTimeSeconds:10,autoStart:!0},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},session:{domain:void 0,expiresMs:u.oD,inactiveMs:u.Hb},ssl:void 0,obfuscate:void 0,jserrors:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},metrics:{enabled:!0,autoStart:!0},page_action:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,harvestTimeSeconds:30,long_task:!1,autoStart:!0},session_trace:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},harvest:{tooManyRequestsDelay:60},session_replay:{autoStart:!0,enabled:!1,harvestTimeSeconds:60,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,inline_stylesheet:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){d(t)?e.mask_selector="".concat(t,",").concat(f):""===t||null===t?e.mask_selector=f:(0,l.Z)("An invalid session_replay.mask_selector was provided. '*' will be used.",t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){d(t)?e.block_selector+=",".concat(t):""!==t&&(0,l.Z)("An invalid session_replay.block_selector was provided and will not be used",t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,l.Z)("An invalid session_replay.mask_input_option was provided and will not be used",t)}},spa:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},soft_navigations:{enabled:!0,harvestTimeSeconds:10,autoStart:!0}}},p={},g="All configuration objects require an agent identifier!";function v(e){if(!e)throw new Error(g);if(!p[e])throw new Error("Configuration for ".concat(e," was never set"));return p[e]}function m(e,t){if(!e)throw new Error(g);p[e]=(0,o.D)(t,h());const r=(0,n.ek)(e);r&&(r.init=p[e])}function b(e,t){if(!e)throw new Error(g);var r=v(e);if(r){for(var n=t.split("."),o=0;o{"use strict";r.d(t,{D:()=>o});var n=r(50);function o(e,t){try{if(!e||"object"!=typeof e)return(0,n.Z)("Setting a Configurable requires an object as input");if(!t||"object"!=typeof t)return(0,n.Z)("Setting a Configurable requires a model to set its initial properties");const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),i=0===Object.keys(r).length?e:r;for(let a in i)if(void 0!==e[a])try{Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):"object"==typeof e[a]&&"object"==typeof t[a]?r[a]=o(e[a],t[a]):r[a]=e[a]}catch(e){(0,n.Z)("An error occurred while setting a property of a Configurable",e)}return r}catch(e){(0,n.Z)("An error occured while setting a Configurable",e)}}},6818:(e,t,r)=>{"use strict";r.d(t,{Re:()=>o,gF:()=>i,lF:()=>a,q4:()=>n});const n="1.253.0",o="PROD",i="CDN",a="2.0.0-alpha.11"},385:(e,t,r)=>{"use strict";r.d(t,{FN:()=>s,IF:()=>u,Nk:()=>f,Tt:()=>c,_A:()=>i,cv:()=>h,iS:()=>a,il:()=>n,ux:()=>d,v6:()=>o,w1:()=>l});const n="undefined"!=typeof window&&!!window.document,o="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),i=n?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),a=Boolean("hidden"===i?.document?.visibilityState),s=""+i?.location,c=/iPad|iPhone|iPod/.test(i.navigator?.userAgent),d=c&&"undefined"==typeof SharedWorker,u=(()=>{const e=i.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),l=Boolean(n&&window.document.documentMode),f=!!i.navigator?.sendBeacon,h=Math.floor(i?.performance?.timeOrigin||i?.performance?.timing?.navigationStart||Date.now())},9907:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});class n{constructor(e){this.contextId=e}}},8929:(e,t,r)=>{"use strict";r.d(t,{v:()=>a});var n=r(8632);const o=(0,r(4402).Rl)();var i=r(9907);class a{static contextId="nr@context:".concat(o);static contextOriginalId="nr@original:".concat(o);static contextWrappedId="nr@wrapped:".concat(a.contextId);static getObservationContextByAgentIdentifier(e){const t=(0,n.fP)();return Object.keys(t?.initializedAgents||{}).indexOf(e)>-1?t.initializedAgents[e].observationContext:void 0}#e=new WeakMap;getCreateContext(e){return this.#e.has(e)||this.#e.set(e,new i.A),this.#e.get(e)}setContext(e,t){return this.#e.set(e,t),this.#e.get(e)}}},1117:(e,t,r)=>{"use strict";r.d(t,{w:()=>i});var n=r(50);const o={agentIdentifier:"",ee:void 0};class i{constructor(e){try{if("object"!=typeof e)return(0,n.Z)("shared context requires an object as input");this.sharedContext={},Object.assign(this.sharedContext,o),Object.entries(e).forEach((e=>{let[t,r]=e;Object.keys(o).includes(t)&&(this.sharedContext[t]=r)}))}catch(e){(0,n.Z)("An error occured while setting SharedContext",e)}}}},8e3:(e,t,r)=>{"use strict";r.d(t,{L:()=>u,R:()=>c});var n=r(2177),o=r(1284),i=r(4322),a=r(3325);const s={};function c(e,t){const r={staged:!1,priority:a.p[t]||0};d(e),s[e].get(t)||s[e].set(t,r)}function d(e){e&&(s[e]||(s[e]=new Map))}function u(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"feature",r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(d(e),!e||!s[e].get(t)||r)return c(t);s[e].get(t).staged=!0;const a=[...s[e]];function c(t){const r=e?n.ee.get(e):n.ee,a=i.X.handlers;if(r.backlog&&a){var s=r.backlog[t],c=a[t];if(c){for(var d=0;s&&d{let[t,r]=e;return r.staged}))&&(a.sort(((e,t)=>e[1].priority-t[1].priority)),a.forEach((t=>{let[r]=t;s[e].delete(r),c(r)})))}function l(e,t){var r=e[1];(0,o.D)(t[r],(function(t,r){var n=e[0];if(r[0]===n){var o=r[1],i=e[3],a=e[2];o.apply(i,a)}}))}},2177:(e,t,r)=>{"use strict";r.d(t,{ee:()=>c});var n=r(8632),o=r(2210),i=r(234),a=r(9907),s=r(8929);const c=function e(t,r){var n={},d={},l={},f=!1;try{f=16===r.length&&(0,i.OP)(r).isolatedBacklog}catch(e){}var h={on:g,addEventListener:g,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var o=0;oh.observationContextManager?h.observationContextManager.getCreateContext(e):new a.A(s.v.contextId))):h.observationContextManager?h.observationContextManager.getCreateContext({}):new a.A(s.v.contextId)}function g(e,t){n[e]=v(e).concat(t)}function v(e){return n[e]||[]}function m(t){const r=l[t]=l[t]||e(h,t);return!r.observationContextManager&&h.observationContextManager&&(r.observationContextManager=h.observationContextManager),r}function b(){return h.backlog}}(void 0,"globalEE"),d=(0,n.fP)();function u(){c.aborted=!0,Object.keys(c.backlog).forEach((e=>{delete c.backlog[e]}))}d.ee||(d.ee=c)},5546:(e,t,r)=>{"use strict";r.d(t,{E:()=>n,p:()=>o});var n=r(2177).ee.get("handle");function o(e,t,r,o,i){i?(i.buffer([e],o),i.emit(e,t,r)):(n.buffer([e],o),n.emit(e,t,r))}},4322:(e,t,r)=>{"use strict";r.d(t,{X:()=>i});var n=r(5546);i.on=a;var o=i.handlers={};function i(e,t,r,i){a(i||n.E,o,e,t,r)}function a(e,t,r,o,i){i||(i="feature"),e||(e=n.E);var a=t[i]=t[i]||{};(a[r]=a[r]||[]).push([e,o])}},3239:(e,t,r)=>{"use strict";r.d(t,{bP:()=>s,iz:()=>c,m$:()=>a});var n=r(385);let o=!1,i=!1;try{const e={get passive(){return o=!0,!1},get signal(){return i=!0,!1}};n._A.addEventListener("test",null,e),n._A.removeEventListener("test",null,e)}catch(e){}function a(e,t){return o||i?{capture:!!e,passive:o,signal:t}:!!e}function s(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3?arguments[3]:void 0;window.addEventListener(e,t,a(r,n))}function c(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3?arguments[3]:void 0;document.addEventListener(e,t,a(r,n))}},4402:(e,t,r)=>{"use strict";r.d(t,{Ht:()=>d,M:()=>c,Rl:()=>a,ky:()=>s});var n=r(385);const o="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function i(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n._A?.crypto||n._A?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),o.split("").map((e=>"x"===e?i(t,r++).toString(16):"y"===e?(3&i()|8).toString(16):e)).join("")}function s(e){const t=n._A?.crypto||n._A?.msCrypto;let r,o=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var s=0;s{"use strict";r.d(t,{Bq:()=>n,Hb:()=>a,IK:()=>d,K4:()=>o,oD:()=>i,uT:()=>c,wO:()=>s});const n="NRBA",o="SESSION",i=144e5,a=18e5,s={PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},c={SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},d={OFF:0,FULL:1,ERROR:2}},7894:(e,t,r)=>{"use strict";function n(){return Math.floor(performance.now())}r.d(t,{z:()=>n})},7243:(e,t,r)=>{"use strict";r.d(t,{e:()=>o});var n=r(385);function o(e){if(0===(e||"").indexOf("data:"))return{protocol:"data"};try{const t=new URL(e,location.href),r={port:t.port,hostname:t.hostname,pathname:t.pathname,search:t.search,protocol:t.protocol.slice(0,t.protocol.indexOf(":")),sameOrigin:t.protocol===n._A?.location?.protocol&&t.host===n._A?.location?.host};return r.port&&""!==r.port||("http:"===t.protocol&&(r.port="80"),"https:"===t.protocol&&(r.port="443")),r.pathname&&""!==r.pathname?r.pathname.startsWith("/")||(r.pathname="/".concat(r.pathname)):r.pathname="/",r}catch(e){return{}}}},50:(e,t,r)=>{"use strict";function n(e,t){"function"==typeof console.warn&&(console.warn("New Relic: ".concat(e)),t&&console.warn(t))}r.d(t,{Z:()=>n})},2825:(e,t,r)=>{"use strict";r.d(t,{N:()=>u,T:()=>l});var n=r(2177),o=r(5546),i=r(3325),a=r(385);const s="newrelic";const c={stn:[i.D.sessionTrace],err:[i.D.jserrors,i.D.metrics],ins:[i.D.pageAction],spa:[i.D.spa,i.D.softNav],sr:[i.D.sessionReplay,i.D.sessionTrace]},d=new Set;function u(e,t){const r=n.ee.get(t);e&&"object"==typeof e&&(d.has(t)||(Object.entries(e).forEach((e=>{let[t,n]=e;c[t]?c[t].forEach((e=>{n?(0,o.p)("feat-"+t,[],void 0,e,r):(0,o.p)("block-"+t,[],void 0,e,r),(0,o.p)("rumresp-"+t,[Boolean(n)],void 0,e,r)})):n&&(0,o.p)("feat-"+t,[],void 0,void 0,r),l[t]=Boolean(n)})),Object.keys(c).forEach((e=>{void 0===l[e]&&(c[e]?.forEach((t=>(0,o.p)("rumresp-"+e,[!1],void 0,t,r))),l[e]=!1)})),d.add(t),function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};try{a._A.dispatchEvent(new CustomEvent(s,{detail:e}))}catch(e){}}({loaded:!0})))}const l={}},2210:(e,t,r)=>{"use strict";r.d(t,{X:()=>o});var n=Object.prototype.hasOwnProperty;function o(e,t,r){if(n.call(e,t))return e[t];var o=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:o,writable:!0,enumerable:!1}),o}catch(e){}return e[t]=o,o}},1284:(e,t,r)=>{"use strict";r.d(t,{D:()=>n});const n=(e,t)=>Object.entries(e||{}).map((e=>{let[r,n]=e;return t(r,n)}))},4351:(e,t,r)=>{"use strict";r.d(t,{P:()=>i});var n=r(2177);const o=()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}};function i(e){try{return JSON.stringify(e,o())}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}}}},3960:(e,t,r)=>{"use strict";r.d(t,{KB:()=>a,b2:()=>i});var n=r(3239);function o(){return"undefined"==typeof document||"complete"===document.readyState}function i(e,t){if(o())return e();(0,n.bP)("load",e,t)}function a(e){if(o())return e();(0,n.iz)("DOMContentLoaded",e)}},8632:(e,t,r)=>{"use strict";r.d(t,{EZ:()=>u,ce:()=>i,ek:()=>d,fP:()=>a,gG:()=>l,h5:()=>c,mF:()=>s});var n=r(7894),o=r(385);const i={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return o._A.NREUM||(o._A.NREUM={}),void 0===o._A.newrelic&&(o._A.newrelic=o._A.NREUM),o._A.NREUM}function s(){let e=a();return e.o||(e.o={ST:o._A.setTimeout,SI:o._A.setImmediate,CT:o._A.clearTimeout,XHR:o._A.XMLHttpRequest,REQ:o._A.Request,EV:o._A.Event,PR:o._A.Promise,MO:o._A.MutationObserver,FETCH:o._A.fetch}),e}function c(e,t){let r=a();r.initializedAgents??={},t.initializedAt={ms:(0,n.z)(),date:new Date},r.initializedAgents[e]=t}function d(e){let t=a();return t.initializedAgents?.[e]}function u(e,t){a()[e]=t}function l(){return function(){let e=a();const t=e.info||{};e.info={beacon:i.beacon,errorBeacon:i.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},7956:(e,t,r)=>{"use strict";r.d(t,{N:()=>o});var n=r(3239);function o(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0;(0,n.iz)("visibilitychange",(function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)}),r,o)}},7806:(e,t,r)=>{"use strict";r.d(t,{em:()=>v,u5:()=>S,QU:()=>D,Kf:()=>P});var n=r(2177),o=r(8929),i=Object.prototype.hasOwnProperty,a=!1;function s(e,t){return e||(e=n.ee),r.inPlace=function(e,t,n,o,i){n||(n="");const a="-"===n.charAt(0);for(let s=0;s2?n-2:0),i=2;i{r(A[E],e,y),r(w[E],e,y)})),r(l._A,"fetch",b),t.on(b+"end",(function(e,r){var n=this;if(r){var o=r.headers.get("content-length");null!==o&&(n.rxSize=o),t.emit(b+"done",[null,r],n)}else t.emit(b+"done",[e],n)})),t}const R={},T=["pushState","replaceState"];function D(e){const t=function(e){return(e||n.ee).get("history")}(e);return!l.il||R[t.debugId]++||(R[t.debugId]=1,s(t).inPlace(window.history,T,"-")),t}var C=r(3239);var O=r(50);const I={},j=["open","send"];function P(e){var t=e||n.ee;const r=function(e){return(e||n.ee).get("xhr")}(t);if(I[r.debugId]++)return r;I[r.debugId]=1,v(t);var o=s(r),i=l._A.XMLHttpRequest,a=l._A.MutationObserver,c=l._A.Promise,d=l._A.setInterval,u="readystatechange",f=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],h=[],p=l._A.XMLHttpRequest=function(e){const t=new i(e),n=r.context(t);try{r.emit("new-xhr",[t],n),t.addEventListener(u,(a=n,function(){var e=this;e.readyState>3&&!a.resolved&&(a.resolved=!0,r.emit("xhr-resolved",[],e)),o.inPlace(e,f,"fn-",A)}),(0,C.m$)(!1))}catch(e){(0,O.Z)("An error occurred while intercepting XHR",e);try{r.emit("internal-error",[e])}catch(e){}}var a;return t};function g(e,t){o.inPlace(t,["onreadystatechange"],"fn-",A)}if(function(e,t){for(var r in e)t[r]=e[r]}(i,p),p.prototype=i.prototype,o.inPlace(p.prototype,j,"-xhr-",A),r.on("send-xhr-start",(function(e,t){g(e,t),function(e){h.push(e),a&&(m?m.then(x):d?d(x):(b=-b,y.data=b))}(t)})),r.on("open-xhr-start",g),a){var m=c&&c.resolve();if(!d&&!c){var b=1,y=document.createTextNode(b);new a(x).observe(y,{characterData:!0})}}else t.on("fn-end",(function(e){e[0]&&e[0].type===u||x()}));function x(){for(var e=0;e{"use strict";r.d(t,{t:()=>n});const n=r(3325).D.ajax},6660:(e,t,r)=>{"use strict";r.d(t,{t:()=>n});const n=r(3325).D.jserrors},3081:(e,t,r)=>{"use strict";r.d(t,{gF:()=>i,mY:()=>o,t9:()=>n,vz:()=>s,xS:()=>a});const n=r(3325).D.metrics,o="sm",i="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},4649:(e,t,r)=>{"use strict";r.d(t,{t:()=>n});const n=r(3325).D.pageAction},7633:(e,t,r)=>{"use strict";r.d(t,{t:()=>n});const n=r(3325).D.pageViewEvent},9251:(e,t,r)=>{"use strict";r.d(t,{t:()=>n});const n=r(3325).D.pageViewTiming},7144:(e,t,r)=>{"use strict";r.d(t,{Ef:()=>i,J0:()=>f,Mi:()=>l,Vb:()=>a,Ye:()=>c,fm:()=>d,i9:()=>s,t9:()=>o,u0:()=>u});var n=r(7056);const o=r(3325).D.sessionReplay,i={RECORD:"recordReplay",PAUSE:"pauseReplay"},a=.12,s={DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},c=1e6,d=64e3,u={[n.IK.ERROR]:15e3,[n.IK.FULL]:3e5,[n.IK.OFF]:0},l={RESET:{message:"Session was reset",sm:"Reset"},IMPORT:{message:"Recorder failed to import",sm:"Import"},TOO_MANY:{message:"429: Too Many Requests",sm:"Too-Many"},TOO_BIG:{message:"Payload was too large",sm:"Too-Big"},CROSS_TAB:{message:"Session Entity was set to OFF on another tab",sm:"Cross-Tab"},ENTITLEMENTS:{message:"Session Replay is not allowed and will not be started",sm:"Entitlement"}},f=5e3},3614:(e,t,r)=>{"use strict";r.d(t,{BST_RESOURCE:()=>o,END:()=>s,FEATURE_NAME:()=>n,FN_END:()=>d,FN_START:()=>c,PUSH_STATE:()=>u,RESOURCE:()=>i,START:()=>a});const n=r(3325).D.sessionTrace,o="bstResource",i="resource",a="-start",s="-end",c="fn"+a,d="fn"+s,u="pushState"},5938:(e,t,r)=>{"use strict";r.d(t,{W:()=>o});var n=r(2177);class o{constructor(e,t,r){this.agentIdentifier=e,this.aggregator=t,this.ee=n.ee.get(e),this.featureName=r,this.blocked=!1}}},8862:(e,t,r)=>{"use strict";r.d(t,{j:()=>A});var n=r(3325),o=r(234),i=r(5546),a=r(2177),s=r(7894),c=r(8e3),d=r(3960),u=r(385),l=r(50),f=r(3081),h=r(8632),p=r(7144);const g=["setErrorHandler","finished","addToTrace","addRelease","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId","setApplicationVersion","start","recordReplay","pauseReplay",p.Ef.RECORD,p.Ef.PAUSE],v=["setErrorHandler","finished","addToTrace","addRelease"];function m(){const e=(0,h.gG)();g.forEach((t=>{e[t]=function(){for(var r=arguments.length,n=new Array(r),o=0;o1?r-1:0),o=1;o{e.exposed&&e.api[t]&&i.push(e.api[t](...n))})),i.length>1?i:i[0]}(t,...n)}}))}var b=r(2825);const y=e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e};let x=!1;function A(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},g=arguments.length>2?arguments[2]:void 0,A=arguments.length>3?arguments[3]:void 0,{init:w,info:E,loader_config:_,runtime:S={loaderType:g},exposed:R=!0}=t;const T=(0,h.gG)();E||(w=T.init,E=T.info,_=T.loader_config),(0,o.Dg)(e.agentIdentifier,w||{}),(0,o.GE)(e.agentIdentifier,_||{}),E.jsAttributes??={},u.v6&&(E.jsAttributes.isWorker=!0),(0,o.CX)(e.agentIdentifier,E);const D=(0,o.P_)(e.agentIdentifier),C=[E.beacon,E.errorBeacon];x||(D.proxy.assets&&(y(D.proxy.assets),C.push(D.proxy.assets)),D.proxy.beacon&&C.push(D.proxy.beacon),m(),(0,h.EZ)("activatedFeatures",b.T),e.runSoftNavOverSpa&&=!0===D.soft_navigations.enabled&&D.feature_flags.includes("soft_nav")),S.denyList=[...D.ajax.deny_list||[],...D.ajax.block_internal?C:[]],(0,o.sU)(e.agentIdentifier,S),void 0===e.api&&(e.api=function(e,t){let h=arguments.length>2&&void 0!==arguments[2]&&arguments[2];t||(0,c.R)(e,"api");const g={};var m=a.ee.get(e),b=m.get("tracer"),y="api-",x=y+"ixn-";function A(t,r,n,i){const a=(0,o.C5)(e);return null===r?delete a.jsAttributes[t]:(0,o.CX)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),_(y,n,!0,i||null===r?"session":void 0)(t,r)}function w(){}v.forEach((e=>{g[e]=_(y,e,!0,"api")})),g.addPageAction=_(y,"addPageAction",!0,n.D.pageAction),g.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,o.OP)(e).customTransaction=(r||"http://custom.transaction")+t,_(y,"setPageViewName",!0)()},g.setCustomAttribute=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof e){if(["string","number","boolean"].includes(typeof t)||null===t)return A(e,t,"setCustomAttribute",r);(0,l.Z)("Failed to execute setCustomAttribute.\nNon-null value must be a string, number or boolean type, but a type of was provided."))}else(0,l.Z)("Failed to execute setCustomAttribute.\nName must be a string type, but a type of was provided."))},g.setUserId=function(e){if("string"==typeof e||null===e)return A("enduser.id",e,"setUserId",!0);(0,l.Z)("Failed to execute setUserId.\nNon-null value must be a string type, but a type of was provided."))},g.setApplicationVersion=function(e){if("string"==typeof e||null===e)return A("application.version",e,"setApplicationVersion",!1);(0,l.Z)("Failed to execute setApplicationVersion. Expected , but got ."))},g.start=e=>{try{const t=e?"defined":"undefined";(0,i.p)(f.xS,["API/start/".concat(t,"/called")],void 0,n.D.metrics,m);const r=Object.values(n.D);if(void 0===e)e=r;else{if((e=Array.isArray(e)&&e.length?e:[e]).some((e=>!r.includes(e))))return(0,l.Z)("Invalid feature name supplied. Acceptable feature names are: ".concat(r));e.includes(n.D.pageViewEvent)||e.push(n.D.pageViewEvent)}e.forEach((e=>{m.emit("".concat(e,"-opt-in"))}))}catch(e){(0,l.Z)("An unexpected issue occurred",e)}},g[p.Ef.RECORD]=function(){(0,i.p)(f.xS,["API/recordReplay/called"],void 0,n.D.metrics,m),(0,i.p)(p.Ef.RECORD,[],void 0,n.D.sessionReplay,m)},g[p.Ef.PAUSE]=function(){(0,i.p)(f.xS,["API/pauseReplay/called"],void 0,n.D.metrics,m),(0,i.p)(p.Ef.PAUSE,[],void 0,n.D.sessionReplay,m)},g.interaction=function(e){return(new w).get("object"==typeof e?e:{})};const E=w.prototype={createTracer:function(e,t){var r={},o=this,a="function"==typeof t;return(0,i.p)(f.xS,["API/createTracer/called"],void 0,n.D.metrics,m),h||(0,i.p)(x+"tracer",[(0,s.z)(),e,r],o,n.D.spa,m),function(){if(b.emit((a?"":"no-")+"fn-start",[(0,s.z)(),o,a],r),a)try{return t.apply(this,arguments)}catch(e){throw b.emit("fn-err",[arguments,this,e],r),e}finally{b.emit("fn-end",[(0,s.z)()],r)}}}};function _(e,t,r,o){return function(){return(0,i.p)(f.xS,["API/"+t+"/called"],void 0,n.D.metrics,m),o&&(0,i.p)(e+t,[(0,s.z)(),...arguments],r?null:this,o,m),r?void 0:this}}function S(){r.e(63).then(r.bind(r,7438)).then((t=>{let{setAPI:r}=t;r(e),(0,c.L)(e,"api")})).catch((()=>{(0,l.Z)("Downloading runtime APIs failed..."),(0,c.L)(e,"api",!0)}))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{E[e]=_(x,e,void 0,h?n.D.softNav:n.D.spa)})),g.setCurrentRouteName=h?_(x,"routeName",void 0,n.D.softNav):_(y,"routeName",!0,n.D.spa),g.noticeError=function(e,t){"string"==typeof e&&(e=new Error(e)),(0,i.p)(f.xS,["API/noticeError/called"],void 0,n.D.metrics,m),(0,i.p)("err",[e,(0,s.z)(),!1,t],void 0,n.D.jserrors,m)},u.il?(0,d.b2)((()=>S()),!0):S(),g}(e.agentIdentifier,A,e.runSoftNavOverSpa)),void 0===e.exposed&&(e.exposed=R),x=!0}},1926:(e,t,r)=>{r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},3325:(e,t,r)=>{"use strict";r.d(t,{D:()=>n,p:()=>o});const n={ajax:"ajax",jserrors:"jserrors",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations",spa:"spa"},o={[n.pageViewEvent]:1,[n.pageViewTiming]:2,[n.metrics]:3,[n.jserrors]:4,[n.ajax]:5,[n.sessionTrace]:6,[n.pageAction]:7,[n.spa]:8,[n.softNav]:9,[n.sessionReplay]:10}}},n={};function o(e){var t=n[e];if(void 0!==t)return t.exports;var i=n[e]={exports:{}};return r[e](i,i.exports,o),i.exports}o.m=r,o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce(((t,r)=>(o.f[r](e,t),t)),[])),o.u=e=>({63:"nr-full",110:"nr-full-compressor",379:"nr-full-recorder"}[e]+"-1.253.0.min.js"),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA-1.253.0.PROD:",o.l=(r,n,i,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==i)for(var d=document.getElementsByTagName("script"),u=0;u{s.onerror=s.onload=null,clearTimeout(p);var o=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),o&&o.forEach((e=>e(n))),t)return t(n)},p=setTimeout(h.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=h.bind(null,s.onerror),s.onload=h.bind(null,s.onload),c&&document.head.appendChild(s)}},o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.p="https://js-agent.newrelic.com/",(()=>{var e={29:0,789:0};o.f.j=(t,r)=>{var n=o.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var i=new Promise(((r,o)=>n=e[t]=[r,o]));r.push(n[2]=i);var a=o.p+o.u(t),s=new Error;o.l(a,(r=>{if(o.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var i=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+i+": "+a+")",s.name="ChunkLoadError",s.type=i,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,i,[a,s,c]=r,d=0;if(a.some((t=>0!==e[t]))){for(n in s)o.o(s,n)&&(o.m[n]=s[n]);if(c)c(o)}for(t&&t(r);d{"use strict";o(1926);var e=o(50),t=o(7144),r=o(8929),n=o(4402),i=o(2177);class a{agentIdentifier;observationContext=new r.v;constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:(0,n.ky)(16);this.agentIdentifier=e;i.ee.get(e).observationContext=this.observationContext}#t(t){for(var r=arguments.length,n=new Array(r>1?r-1:0),o=1;o{t[r]=function(e,t){return!0===(0,c.Mt)(t,"".concat(e,".enabled"))}(r,e)})),t}var l=o(8862);var f=o(8e3),h=o(5938),p=o(3960),g=o(385);const v=e=>g.il&&!0===(0,c.Mt)(e,"privacy.cookies_enabled");function m(e){return c.Yu.MO&&v&&!0===(0,c.Mt)(e,"session_trace.enabled")}function b(e){return!0===(0,c.Mt)(e,"session_replay.preload")&&m(e)}class y extends h.W{constructor(e,t,r){let n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];super(e,t,r),this.auto=n,this.abortHandler=void 0,this.featAggregate=void 0,this.onAggregateImported=void 0,!1===(0,c.Mt)(this.agentIdentifier,"".concat(this.featureName,".autoStart"))&&(this.auto=!1),this.auto&&(0,f.R)(e,r)}importAggregator(){let t,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this.featAggregate)return;if(!this.auto)return void this.ee.on("".concat(this.featureName,"-opt-in"),(()=>{(0,f.R)(this.agentIdentifier,this.featureName),this.auto=!0,this.importAggregator()}));this.onAggregateImported=new Promise((e=>{t=e}));const n=async()=>{let n;try{if(v(this.agentIdentifier)){const{setupAgentSession:e}=await o.e(63).then(o.bind(o,1656));n=e(this.agentIdentifier)}}catch(t){(0,e.Z)("A problem occurred when starting up session manager. This page will not start or extend any session.",t),this.featureName===s.D.sessionReplay&&this.abortHandler?.()}try{if(!this.#r(this.featureName,n))return(0,f.L)(this.agentIdentifier,this.featureName),void t(!1);const{lazyFeatureLoader:e}=await o.e(63).then(o.bind(o,8582)),{Aggregate:i}=await e(this.featureName,"aggregate");this.featAggregate=new i(this.agentIdentifier,this.aggregator,r),t(!0)}catch(r){(0,e.Z)("Downloading and initializing ".concat(this.featureName," failed..."),r),this.abortHandler?.(),(0,f.L)(this.agentIdentifier,this.featureName,!0),t(!1)}};g.il?(0,p.b2)((()=>n()),!0):n()}#r(e,t){return e!==s.D.sessionReplay||(r=this.agentIdentifier,n=t,!(!m(r)||!n?.isNew&&!n?.state.sessionReplayMode));var r,n}}var x=o(7633);class A extends y{static featureName=x.t;constructor(e,t){let r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];super(e,t,x.t,r),this.importAggregator()}}var w=o(1117),E=o(1284);class _ extends w.w{constructor(e){super(e),this.aggregatedData={}}store(e,t,r,n,o){var i=this.getBucket(e,t,r,o);return i.metrics=function(e,t){t||(t={count:0});return t.count+=1,(0,E.D)(e,(function(e,r){t[e]=S(r,t[e])})),t}(n,i.metrics),i}merge(e,t,r,n,o){var i=this.getBucket(e,t,n,o);if(i.metrics){var a=i.metrics;a.count+=r.count,(0,E.D)(r,(function(e,t){if("count"!==e){var n=a[e],o=r[e];o&&!o.c?a[e]=S(o.t,n):a[e]=function(e,t){if(!t)return e;t.c||(t=R(t.t));return t.min=Math.min(e.min,t.min),t.max=Math.max(e.max,t.max),t.t+=e.t,t.sos+=e.sos,t.c+=e.c,t}(o,a[e])}}))}else i.metrics=r}storeMetric(e,t,r,n){var o=this.getBucket(e,t,r);return o.stats=S(n,o.stats),o}getBucket(e,t,r,n){this.aggregatedData[e]||(this.aggregatedData[e]={});var o=this.aggregatedData[e][t];return o||(o=this.aggregatedData[e][t]={params:r||{}},n&&(o.custom=n)),o}get(e,t){return t?this.aggregatedData[e]&&this.aggregatedData[e][t]:this.aggregatedData[e]}take(e){for(var t={},r="",n=!1,o=0;ot.max&&(t.max=e),e2&&void 0!==arguments[2])||arguments[2];super(e,t,P.t,r),g.il&&((0,O.N)((()=>(0,C.p)("docHidden",[(0,j.z)()],void 0,P.t,this.ee)),!0),(0,I.bP)("pagehide",(()=>(0,C.p)("winPagehide",[(0,j.z)()],void 0,P.t,this.ee))),this.importAggregator())}}var k=o(3081);class M extends y{static featureName=k.t9;constructor(e,t){let r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];super(e,t,k.t9,r),this.importAggregator()}}var H=o(6660);class z{constructor(e,t,r,n){this.name="UncaughtError",this.message=e,this.sourceURL=t,this.line=r,this.column=n}}class L extends y{static featureName=H.t;#n=new Set;constructor(e,t){let r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];super(e,t,H.t,r);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("fn-err",((e,t,r)=>{this.abortHandler&&!this.#n.has(r)&&(this.#n.add(r),(0,C.p)("err",[this.#o(r),(0,j.z)()],void 0,s.D.jserrors,this.ee))})),this.ee.on("internal-error",(e=>{this.abortHandler&&(0,C.p)("ierr",[this.#o(e),(0,j.z)(),!0],void 0,s.D.jserrors,this.ee)})),g._A.addEventListener("unhandledrejection",(e=>{this.abortHandler&&(0,C.p)("err",[this.#i(e),(0,j.z)(),!1,{unhandledPromiseRejection:1}],void 0,s.D.jserrors,this.ee)}),(0,I.m$)(!1,this.removeOnAbort?.signal)),g._A.addEventListener("error",(e=>{this.abortHandler&&(this.#n.has(e.error)?this.#n.delete(e.error):(0,C.p)("err",[this.#a(e),(0,j.z)()],void 0,s.D.jserrors,this.ee))}),(0,I.m$)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#s,this.importAggregator()}#s(){this.removeOnAbort?.abort(),this.#n.clear(),this.abortHandler=void 0}#o(e){return e instanceof Error?e:void 0!==e?.message?new z(e.message,e.filename||e.sourceURL,e.lineno||e.line,e.colno||e.col):new z("string"==typeof e?e:(0,D.P)(e))}#i(e){let t="Unhandled Promise Rejection: ";if(e?.reason instanceof Error)try{return e.reason.message=t+e.reason.message,e.reason}catch(t){return e.reason}if(void 0===e.reason)return new z(t);const r=this.#o(e.reason);return r.message=t+r.message,r}#a(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new z(e.message,e.filename,e.lineno,e.colno);return t.name=SyntaxError.name,t}return e.error instanceof Error?e.error:new z(e.message,e.filename,e.lineno,e.colno)}}var U=o(2210);let F=1;const B="nr@id";function q(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===g._A?0:(0,U.X)(e,B,(function(){return F++}))}function V(e){if("string"==typeof e&&e.length)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,D.P)(e).length}catch(e){return}}}var Z=o(7806),W=o(7243);class G{constructor(e){this.agentIdentifier=e}generateTracePayload(e){if(!this.shouldGenerateTrace(e))return null;var t=(0,c.DL)(this.agentIdentifier);if(!t)return null;var r=(t.accountID||"").toString()||null,o=(t.agentID||"").toString()||null,i=(t.trustKey||"").toString()||null;if(!r||!o)return null;var a=(0,n.M)(),s=(0,n.Ht)(),d=Date.now(),u={spanId:a,traceId:s,timestamp:d};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(u.traceContextParentHeader=this.generateTraceContextParentHeader(a,s),u.traceContextStateHeader=this.generateTraceContextStateHeader(a,d,r,o,i)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(u.newrelicHeader=this.generateTraceHeader(a,s,d,r,o,i)),u}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,o){return o+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,o,i){if(!("function"==typeof g._A?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:o,id:e,tr:t,ti:r}};return i&&n!==i&&(a.d.tk=i),btoa((0,D.P)(a))}shouldGenerateTrace(e){return this.isDtEnabled()&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var t=!1,r={};if((0,c.Mt)(this.agentIdentifier,"distributed_tracing")&&(r=(0,c.P_)(this.agentIdentifier).distributed_tracing),e.sameOrigin)t=!0;else if(r.allowed_origins instanceof Array)for(var n=0;n2&&void 0!==arguments[2])||arguments[2];if(super(e,t,K.t,r),(0,c.OP)(e).xhrWrappable){this.dt=new G(e),this.handler=(e,t,r,n)=>(0,C.p)(e,t,r,n,this.ee);try{const e={xmlhttprequest:"xhr",fetch:"fetch",beacon:"beacon"};g._A?.performance?.getEntriesByType("resource").forEach((t=>{if(t.initiatorType in e&&0!==t.responseStatus){const r={status:t.responseStatus},n={rxSize:t.transferSize,duration:Math.floor(t.duration),cbTime:0};te(r,t.name),this.handler("xhr",[r,n,t.startTime,t.responseEnd,e[t.initiatorType]],void 0,s.D.ajax)}}))}catch(e){}(0,Z.u5)(this.ee),(0,Z.Kf)(this.ee),function(e,t,r,n){function o(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=w,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},e.addEventListener("load",(function(r){E(t,e)}),(0,I.m$)(!1)),g.IF||e.addEventListener("progress",(function(e){t.lastSize=e.loaded}),(0,I.m$)(!1))}function i(e){this.params={method:e[0]},te(this,e[1]),this.metrics={}}function a(t,r){var o=(0,c.DL)(e);o.xpid&&this.sameOrigin&&r.setRequestHeader("X-NewRelic-ID",o.xpid);var i=n.generateTracePayload(this.parsedOrigin);if(i){var a=!1;i.newrelicHeader&&(r.setRequestHeader("newrelic",i.newrelicHeader),a=!0),i.traceContextParentHeader&&(r.setRequestHeader("traceparent",i.traceContextParentHeader),i.traceContextStateHeader&&r.setRequestHeader("tracestate",i.traceContextStateHeader),a=!0),a&&(this.dt=i)}}function d(e,r){var n=this.metrics,o=e[0],i=this;if(n&&o){var a=V(o);a&&(n.txSize=a)}this.startTime=(0,j.z)(),this.body=o,this.listener=function(e){try{"abort"!==e.type||i.loadCaptureCalled||(i.params.aborted=!0),("load"!==e.type||i.called===i.totalCbs&&(i.onloadCalled||"function"!=typeof r.onload)&&"function"==typeof i.end)&&i.end(r)}catch(e){try{t.emit("internal-error",[e])}catch(e){}}};for(var s=0;s1?e[1]=i:e.push(i)}}function s(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function x(e,t){this.params={},this.metrics={},this.startTime=(0,j.z)(),this.dt=t,e.length>=1&&(this.target=e[0]),e.length>=2&&(this.opts=e[1]);var r,n=this.opts||{},o=this.target;"string"==typeof o?r=o:"object"==typeof o&&o instanceof Q?r=o.url:g._A?.URL&&"object"==typeof o&&o instanceof URL&&(r=o.href),te(this,r);var i=(""+(o&&o instanceof Q&&o.method||n.method||"GET")).toUpperCase();this.params.method=i,this.body=n.body,this.txSize=V(n.body)||0}function A(e,t){var n;this.endTime=(0,j.z)(),this.params||(this.params={}),this.params.status=t?t.status:0,"string"==typeof this.rxSize&&this.rxSize.length>0&&(n=+this.rxSize);var o={txSize:this.txSize,rxSize:n,duration:(0,j.z)()-this.startTime};r("xhr",[this.params,o,this.startTime,this.endTime,"fetch"],this,s.D.ajax)}function w(e){var t=this.params,n=this.metrics;if(!this.ended){this.ended=!0;for(var o=0;o2&&void 0!==arguments[2])||arguments[2];super(e,r,t.t9,o);try{n=JSON.parse(localStorage.getItem("".concat(le.Bq,"_").concat(le.K4)))}catch(e){}this.#c(n)?this.#d(n?.sessionReplayMode):this.importAggregator()}#c(e){return e&&(e.sessionReplayMode===le.IK.FULL||e.sessionReplayMode===le.IK.ERROR)||b(this.agentIdentifier)}async#d(e){const{Recorder:t}=await Promise.all([o.e(63),o.e(379)]).then(o.bind(o,4136));this.recorder=new t({mode:e,agentIdentifier:this.agentIdentifier}),this.recorder.startRecording(),this.abortHandler=this.recorder.stopRecording,this.importAggregator({recorder:this.recorder})}}var he=o(4649);class pe extends y{static featureName=he.t;constructor(e,t){let r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];super(e,t,he.t,r),this.importAggregator()}}new class extends a{constructor(t,r){super(r),g._A?(this.sharedAggregator=new _({agentIdentifier:this.agentIdentifier}),this.features={},(0,T.h5)(this.agentIdentifier,this),this.desiredFeatures=new Set(t.features||[]),this.desiredFeatures.add(A),this.runSoftNavOverSpa=[...this.desiredFeatures].some((e=>e.featureName===s.D.softNav)),(0,l.j)(this,t,t.loaderType||"agent"),this.run()):(0,e.Z)("Failed to initial the agent. Could not determine the runtime environment.")}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}run(){try{const t=u(this.agentIdentifier),r=[...this.desiredFeatures];r.sort(((e,t)=>s.p[e.featureName]-s.p[t.featureName])),r.forEach((r=>{if(!t[r.featureName]&&r.featureName!==s.D.pageViewEvent)return;if(this.runSoftNavOverSpa&&r.featureName===s.D.spa)return;if(!this.runSoftNavOverSpa&&r.featureName===s.D.softNav)return;const n=function(e){switch(e){case s.D.ajax:return[s.D.jserrors];case s.D.sessionTrace:return[s.D.ajax,s.D.pageViewEvent];case s.D.sessionReplay:return[s.D.sessionTrace];case s.D.pageViewTiming:return[s.D.pageViewEvent];default:return[]}}(r.featureName);n.every((e=>e in this.features))||(0,e.Z)("".concat(r.featureName," is enabled but one or more dependent features has not been initialized (").concat((0,D.P)(n),"). This may cause unintended consequences or missing data...")),this.features[r.featureName]=new r(this.agentIdentifier,this.sharedAggregator)}))}catch(t){(0,e.Z)("Failed to initialize all enabled instrument classes (agent aborted) -",t);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,T.fP)();return delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator,r.ee?.abort(),delete r.ee?.get(this.agentIdentifier),!1}}}({features:[A,N,class extends y{static featureName=se;constructor(e,t){if(super(e,t,se,!(arguments.length>2&&void 0!==arguments[2])||arguments[2]),!g.il)return;const r=this.ee;let n;(0,Z.QU)(r),this.eventsEE=(0,Z.em)(r),this.eventsEE.on(de,(function(e,t){this.bstStart=(0,j.z)()})),this.eventsEE.on(ce,(function(e,t){(0,C.p)("bst",[e[0],t,this.bstStart,(0,j.z)()],void 0,s.D.sessionTrace,r)})),r.on(ue+ie,(function(e){this.time=(0,j.z)(),this.startPath=location.pathname+location.hash})),r.on(ue+ae,(function(e){(0,C.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,s.D.sessionTrace,r)}));try{n=new PerformanceObserver((e=>{const t=e.getEntries();(0,C.p)(ne,[t],void 0,s.D.sessionTrace,r)})),n.observe({type:oe,buffered:!0})}catch(e){}this.importAggregator({resourceObserver:n})}},fe,ee,M,pe,L],loaderType:"pro"})})()})(); header, footer, .graph, .nav, svg { display: none } window.dataLayer = window.dataLayer || []; dataLayer.push({"loggedIn":false,"visitorId":8644076494,"userId":null}); (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl+'';f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-PZ55S7'); window.bugsnagClient = bugsnag({ apiKey: "8251a8eb6422d59eaf410e7c1b1c7b38", releaseStage: "production", beforeSend: function (report) { if (window.location.hostname != "teamtreehouse.com") { report.ignore(); } } }); function OptanonWrapper() { window.dataLayer.push({ event: "OneTrustGroupsUpdated" }) } //

Level up your Python game by crafting a polished portfolio with Flask in our workshop.

Join our free community Discord server here!

Learn React with us!

Get job-ready with our Career Toolbox Track's career advice, resume tips, and more 🧰

🤖 Check out all our AI content here 👀

  • Treehouse Logo
  • Plans Chevron
    • For Individuals
    • For Businesses
    • For Schools
    • For Libraries
  • Library Chevron
    • All Courses
    • Tracks
  • Techdegree Chevron
    • Overview
    • Front End Development
    • Full Stack JavaScript
    • Data Analysis
    • UX Design
    • Python
  • Community Chevron
    • Live Sessions
    • Code Adventures
    • Discord
    • Forum
    • Success Stories
    • Treehouse Links
  • Resources Chevron
    • Public Library Access
    • Jobs
    • Blog
    • Support
    • About
  • Plans For Individuals For Businesses For Schools For Libraries
  • Library All Courses Tracks
  • Techdegree Overview Front End Web Development Full Stack JavaScript Python Development Data Analysis UX Design
  • Community Live Sessions Code Adventures Discord Forum Success Stories Treehouse Links
  • Resources Public Library Access Jobs Blog Support About
  • Sign In
  • Free Trial
Instagram Twitter Facebook YouTube LinkedIn

Welcome to the Treehouse Library

This is a sample catalog of all the courses we offer. Browse by topic or difficulty. Sign up today and get access to our entire library. Treehouse students get access to workshops, bonus content, conferences, and more.

Ready to start learning?

Treehouse offers a 7 day free trial for new students. Get access to 1000s of hours of content. Learn to code, land your dream job.

Start Your Free Trial Filters:
  • Newest
    • Newest
    • Oldest
    • Alphabetical
    • Difficulty
  • Content type
    • All Types
    • Course
    • Workshop
    • Practice
    • Conference
    • Bonus Series
  • All Topics
    • All Topics
    • • AI
    • • JavaScript
    • • Databases
    • • Python
    • • Design
    • • React
    • • HTML
    • • CSS
    • • Data Analysis
    • • Java
    • • C#
    • • Android
    • • Computer Science
    • • PHP
    • • Quality Assurance
    • • APIs
    • • Security
    • • Digital Literacy
    • • Development Tools
    • • Business
    • • 21st Century Skills
    • • Ruby
    • • Machine Learning
    • • Learning Resources
    • • Go Language
    • • Equity, Diversity, and Inclusion (EDI)
View all Tracks

Popular Tracks

These are some of the most common tracks students start with.

    56 hours

    Track

    Front End Web Development

    Learn to code websites using HTML, CSS, and JavaScript.

    • Explore
    • Play
    • An entry-level salary for the technologies covered in this track is about $51,000 / yr on average.

    • Some companies that use these technologies regularly include: Google, Facebook, Yahoo, eBay, Amazon, and Treehouse.

    14 hours

    Track

    Beginning Python

    Learn the general purpose programming language Python and build large and small applications and tools.

    • Explore
    • Play
    • An entry-level salary for the technologies covered in this track is about $70,000 / yr on average.

    • Some companies that use these technologies regularly include: Google, NASA, Nokia, IBM, Digg, Dropbox, Pinterest, Reddit, Yelp, Apple, and Amazon.

    41 hours

    Track

    Full Stack JavaScript

    Learn JavaScript, Node.js, and Express to become a professional JavaScript developer.

    • Explore
    • Play
    • An entry-level salary for the technologies covered in this track is about $65,000 / yr on average.

    • Some companies that use these technologies regularly include: Walmart, PayPal, Groupon, Airbnb.

Topics

Browse content by the topics that interest you most.

  • AI
  • JavaScript
  • Databases
  • Python
  • Design
  • React
  • HTML
  • CSS
  • Data Analysis
  • Java
  • C#
  • Android
  • Computer Science
  • PHP
  • Quality Assurance
  • APIs
  • Security
  • Digital Literacy
  • Development Tools
  • Business
  • 21st Century Skills
  • Ruby
  • Machine Learning
  • Learning Resources
  • Go Language
  • Equity, Diversity, and Inclusion (EDI)

Change Your Career, Change Your Life

With 100s of courses and more to come, Treehouse is the best way to learn how to code.

Start Your Free Trial View all 291

Courses

Browse courses across an array of topics and disciplines.

    • 1
    • 2
    • 3
    • 4
    3 hours Course

    JavaScript Basics

    | 23729 students

    JavaScript is a programming language that drives the web: from front-end user interface design to server-side backend programming, you'll find JavaScript at every stage of a website and web application. In this course, you'll learn the fundamental programming concepts and syntax of the JavaScript programming language.

    Checkmark
    • JavaScript
    • Beginner
      • 1
      • 2
      • 3
      • 4
      3 hours Course

      HTML Basics

      | 51206 students

      Learn HTML (HyperText Markup Language), the language common to every web

    Taught by

    Daniel Montgomery

    Reviews

    Start your review of AI Chatbot Comparison: Google Bard, Bing AI, Claude, ChatGPT Course

    Never Stop Learning.

    Get personalized course recommendations, track subjects and courses with reminders, and more.

    Someone learning on their laptop while sitting on the floor.