See running a node for more information on how to set up a node.While some applications can be written by directly querying Hubble, most serious applications need to access the data
in a more structured way.Shuttle is a package
that can be used to mirror Snapchain’s data to a Postgres DB for convenient access to the underlying data.
git clone git@github.com:farcasterxyz/hub-monorepo.git# Ensure you have node 21 installed, use nvm to install itnvm install 21# If necessary, build packages/core dependency( cd packages/core && yarn install && yarn build; )# If necessary, build packages/hub-nodejs dependency( cd packages/hub-nodejs && yarn install && yarn build; )# Do remainder within the packages/shuttle directorycd packages/shuttleyarn install && yarn build# Start the db dependenciesdocker compose up postgres redis# To perform reconciliation/backfill, start the worker (can run multiple processes to speed this up)POSTGRES_URL=postgres://shuttle:password@0.0.0.0:6541 REDIS_URL=0.0.0.0:16379 HUB_HOST=<host>:<port> HUB_SSL=false yarn start worker# Kick off the backfill process (configure with MAX_FID=100 or BACKFILL_FIDS=1,2,3)POSTGRES_URL=postgres://shuttle:password@0.0.0.0:6541 REDIS_URL=0.0.0.0:16379 HUB_HOST=<host>:<port> HUB_SSL=false yarn start backfill# Start the app and sync messages from the event streamPOSTGRES_URL=postgres://shuttle:password@0.0.0.0:6541 REDIS_URL=0.0.0.0:16379 HUB_HOST=<host>:<port> HUB_SSL=false yarn start start
This package is fully re-used from Hubble because the Snapchain APIs are backwards compatible with Hubble.Check out the documentation for more information.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Neynar","colors":{"primary":"#482b82","light":"#8512e0","dark":"#482b82"},"logo":{"light":"https://mintcdn.com/neynar/R9a_lt8Wf1SbwKa6/logo/farcaster-icon-light.svg?fit=max\u0026auto=format\u0026n=R9a_lt8Wf1SbwKa6\u0026q=85\u0026s=68441f4612c3fb569fd6cfd574f7be38","dark":"https://mintcdn.com/neynar/R9a_lt8Wf1SbwKa6/logo/farcaster-icon.svg?fit=max\u0026auto=format\u0026n=R9a_lt8Wf1SbwKa6\u0026q=85\u0026s=5bd2df1a42270c9df85557b517f1be64","href":"https://docs.neynar.com/"},"favicon":"https://mintcdn.com/neynar/R9a_lt8Wf1SbwKa6/favicon.svg?fit=max\u0026auto=format\u0026n=R9a_lt8Wf1SbwKa6\u0026q=85\u0026s=8ff2344189ea332738675757ccc06287","appearance":{"default":"dark"},"background":{"decoration":"gradient"},"navbar":{"links":[{"href":"https://dev.neynar.com/","label":"Log in"}],"primary":{"type":"github","href":"https://github.com/farcasterxyz"}},"footer":{"socials":{"github":"https://github.com/neynarxyz"}},"seo":{"metatags":{"og:type":"website","og:site_name":"Neynar Docs","og:url":"https://docs.neynar.com","og:title":"Neynar Documentation","og:description":"Comprehensive documentation for Neynar APIs and SDKs","referrer":"strict-origin-when-cross-origin","robots":"index, follow"},"indexing":"all"},"fonts":{"heading":{"family":"Work Sans","weight":500},"body":{"family":"Work Sans"}},"styling":{"codeblocks":"system","latex":true},"integrations":{"ga4":{"measurementId":"G-P1P663665L"}},"contextual":{"options":["claude","chatgpt","cursor","vscode","mcp","copy","view"],"display":"header"},"navigation":{"global":{"anchors":[{"anchor":"Status","icon":"signal","href":"https://status.neynar.com/"},{"anchor":"Blog","icon":"newspaper","href":"https://neynar.com/blog"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"neynar","hasAudioNarration":false,"actualSubdomain":"neynar","customDomains":["docs.neynar.com"],"gitSource":{"type":"github","owner":"neynarxyz","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":true,"issues":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aebe3fbbaab42e7766182d9","clientVersion":"0.0.4124","searchFilterCounts":[{"language":"default","tag":"REST API Reference","count":166},{"language":"default","tag":"Node.js SDK","count":138},{"language":"default","tag":"Farcaster","count":128},{"language":"default","tag":"Learn","count":92},{"language":"default","tag":"Tutorials","count":80},{"language":"default","tag":"Mini Apps","count":53},{"language":"default","tag":"Snapchain","count":39},{"language":"default","tag":"SDK","count":27},{"language":"default","tag":"Reference","count":25},{"language":"default","tag":"Farcaster Hub API","count":25}]},"assistantConfig":{"deflection":{"enabled":true,"email":"support@neynar.com","showHelpButton":true}},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","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":"rbac-expansion","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":"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":"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":"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},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","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}],"googleFontsInlined":true},"customCss":[{"filePath":"custom.css","content":"h1,h2,h3,h4,h5,h6{font-weight:500!important}.page-title,.section-title,.heading{font-weight:500!important}[class*=\"font-bold\"],[class*=\"font-semibold\"]{font-weight:500!important}.cursor-doc-image{width:min(640px, 80%);height:auto;display:block;margin:0.5rem auto;border-radius:12px}.cursor-doc-image--compact{width:min(300px, 60%);height:auto;display:block;margin:0.5rem auto;border-radius:12px}.nav-dropdown-wrapper{position:relative;display:inline-flex}.nav-dropdown-trigger{display:inline-flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;font-size:14px;font-weight:500;font-family:inherit;color:inherit;padding:6px 0;white-space:nowrap}.nav-dropdown-trigger:hover{opacity:0.8}.nav-dropdown-chevron{display:inline-flex;align-items:center;transition:transform 0.2s ease}.nav-dropdown-wrapper.open .nav-dropdown-chevron{transform:rotate(180deg)}.nav-dropdown-menu{position:absolute;top:calc(100% + 8px);right:0;min-width:180px;border-radius:8px;padding:4px;opacity:0;visibility:hidden;transform:translateY(-4px);transition:opacity 0.15s ease, transform 0.15s ease, visibility 0.15s;z-index:100;background:#ffffff;border:1px solid #e5e5e5;box-shadow:0 4px 12px rgba(0, 0, 0, 0.08)}:root[class~=\"dark\"] .nav-dropdown-menu,.dark .nav-dropdown-menu{background:#1a1a2e;border-color:#2a2a3e;box-shadow:0 4px 12px rgba(0, 0, 0, 0.3)}.nav-dropdown-wrapper.open .nav-dropdown-menu{opacity:1;visibility:visible;transform:translateY(0)}.nav-dropdown-item{display:block;padding:8px 12px;font-size:14px;font-weight:400;color:#374151;text-decoration:none;border-radius:6px;white-space:nowrap}.nav-dropdown-item:hover{background:#f3f4f6;color:#111827;text-decoration:none}:root[class~=\"dark\"] .nav-dropdown-item,.dark .nav-dropdown-item{color:#d1d5db}:root[class~=\"dark\"] .nav-dropdown-item:hover,.dark .nav-dropdown-item:hover{background:#2a2a3e;color:#ffffff}"}],"page":{"pagePath":"snapchain/guides/syncing-to-db","slug":"/snapchain/guides/syncing-to-db","pageMetadata":{"title":"Sync Snapchain to Postgres","description":"Mirror Snapchain data to a Postgres database for convenient access","sidebarTitle":"Sync to Database","href":"/snapchain/guides/syncing-to-db"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Mirror Snapchain data to a Postgres database for convenient access\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"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`,p:`p`,pre:`pre`,span:`span`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`3`,id:`pre-requisites`,children:`Pre-requisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Read access to a Snapchain node`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/snapchain/guides/running-a-node`,children:`running a node`}),` for more information on how to set up a node.`]}),`\n`,_jsx(_components.p,{children:`While some applications can be written by directly querying Hubble, most serious applications need to access the data\nin a more structured way.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`https://github.com/farcasterxyz/hub-monorepo/tree/main/packages/shuttle`,children:`Shuttle`}),` is a package\nthat can be used to mirror Snapchain’s data to a Postgres DB for convenient access to the underlying data.`]}),`\n`,_jsx(Heading,{level:`2`,id:`quickstart`,children:`Quickstart`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`26`,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:`26`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`git`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` clone `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`git`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`@github.com:farcasterxyz/hub-monorepo.git`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Ensure you have node 21 installed, use nvm to install it`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`nvm install 21`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# If necessary, build packages/core dependency`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`( `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`cd`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` packages/core \u0026\u0026 `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`yarn`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` install \u0026\u0026 `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`yarn`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` build; )`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# If necessary, build packages/hub-nodejs dependency`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`( `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`cd`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` packages/hub-nodejs \u0026\u0026 `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`yarn`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` install \u0026\u0026 `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`yarn`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` build; )`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Do remainder within the packages/shuttle directory`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`cd`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` packages/shuttle`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`yarn`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` install \u0026\u0026 `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`yarn`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` build`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Start the db dependencies`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`docker`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` compose up postgres redis`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# To perform reconciliation/backfill, start the worker (can run multiple processes to speed this up)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`POSTGRES_URL=postgres://shuttle:password@0.0.0.0:6541 REDIS_URL=0.0.0.0:16379 HUB_HOST=\u003chost>:\u003cport> HUB_SSL=false `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`yarn`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` start worker`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Kick off the backfill process (configure with MAX_FID=100 or BACKFILL_FIDS=1,2,3)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`POSTGRES_URL=postgres://shuttle:password@0.0.0.0:6541 REDIS_URL=0.0.0.0:16379 HUB_HOST=\u003chost>:\u003cport> HUB_SSL=false `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`yarn`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` start backfill`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Start the app and sync messages from the event stream`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`POSTGRES_URL=postgres://shuttle:password@0.0.0.0:6541 REDIS_URL=0.0.0.0:16379 HUB_HOST=\u003chost>:\u003cport> HUB_SSL=false `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`yarn`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` start start`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`This package is fully re-used from Hubble because the Snapchain APIs are backwards compatible with Hubble.`}),`\n`,_jsxs(_components.p,{children:[`Check out the `,_jsx(_components.a,{href:`https://github.com/farcasterxyz/hub-monorepo/blob/main/packages/shuttle/README.md`,children:`documentation`}),` for more information.`]})]})}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":{"codeStyling":"system","config":{},"pageMetadata":{"title":"Sync Snapchain to Postgres","description":"Mirror Snapchain data to a Postgres database for convenient access","sidebarTitle":"Sync to Database","href":"/snapchain/guides/syncing-to-db"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Pre-requisites","slug":"pre-requisites","depth":3,"children":[]},{"title":"Quickstart","slug":"quickstart","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/neynar/877f22f5fc1f428d/ahrefs.js","/_mintlify/custom/neynar/298abe83c87933a3/scripts/generate-nodejs-sdk-docs.js","/_mintlify/custom/neynar/be9de9b5ab62eeb0/navbar-dropdown.js"],"subdomain":"neynar","siteName":"Neynar","title":"Neynar Documentation","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-02-02T05:12:27.635Z","originalFileLocation":"snapchain/guides/syncing-to-db.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=\"dark\"}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=\"Mirror Snapchain data to a Postgres database for convenient access\">\u003cmeta data-mint-head name=\"application-name\" content=\"Neynar\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"index, follow\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/neynar/st0_6iz_-a2LKQkt/_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/neynar/st0_6iz_-a2LKQkt/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/neynar/st0_6iz_-a2LKQkt/_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/neynar/st0_6iz_-a2LKQkt/_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/neynar/st0_6iz_-a2LKQkt/_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/neynar/st0_6iz_-a2LKQkt/_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/neynar/st0_6iz_-a2LKQkt/_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/neynar/st0_6iz_-a2LKQkt/_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/neynar/st0_6iz_-a2LKQkt/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Neynar Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Comprehensive documentation for Neynar APIs and SDKs\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Neynar Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.neynar.com/snapchain/guides/syncing-to-db\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://neynar.mintlify.site/_mintlify/api/og/v2?division=Guides\u0026amp;title=Sync+Snapchain+to+Postgres\u0026amp;description=Mirror+Snapchain+data+to+a+Postgres+database+for+convenient+access\u0026amp;theme=578d2e96050b9a8a112b6d3a\u0026amp;signature=db8fe0c915b9229276e35468de82fb60291dee295017fa387e3b15897e553b51\">\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=\"Neynar Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Comprehensive documentation for Neynar APIs and SDKs\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://neynar.mintlify.site/_mintlify/api/og/v2?division=Guides\u0026amp;title=Sync+Snapchain+to+Postgres\u0026amp;description=Mirror+Snapchain+data+to+a+Postgres+database+for+convenient+access\u0026amp;theme=578d2e96050b9a8a112b6d3a\u0026amp;signature=db8fe0c915b9229276e35468de82fb60291dee295017fa387e3b15897e553b51\">\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/neynar/st0_6iz_-a2LKQkt/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Neynar\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#482b82\">\u003cmeta data-mint-head name=\"referrer\" content=\"strict-origin-when-cross-origin\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.neynar.com/snapchain/guides/syncing-to-db\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/snapchain/guides/syncing-to-db.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.neynar.com/#organization\",\"name\":\"Neynar\",\"url\":\"https://docs.neynar.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/neynar/R9a_lt8Wf1SbwKa6/logo/farcaster-icon-light.svg?fit=max\u0026auto=format\u0026n=R9a_lt8Wf1SbwKa6\u0026q=85\u0026s=68441f4612c3fb569fd6cfd574f7be38\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.neynar.com#website\",\"name\":\"Neynar\",\"url\":\"https://docs.neynar.com\",\"publisher\":{\"@id\":\"https://docs.neynar.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.neynar.com/snapchain/guides/syncing-to-db#webpage\",\"url\":\"https://docs.neynar.com/snapchain/guides/syncing-to-db\",\"name\":\"Sync Snapchain to Postgres\",\"description\":\"Mirror Snapchain data to a Postgres database for convenient access\",\"dateModified\":\"2026-02-02T05:12:27.635Z\",\"isPartOf\":{\"@id\":\"https://docs.neynar.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.neynar.com/snapchain/guides/syncing-to-db#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.neynar.com/snapchain/guides/syncing-to-db#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Guides\",\"item\":\"https://docs.neynar.com/snapchain/guides/running-a-node\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sync Snapchain to Postgres\",\"item\":\"https://docs.neynar.com/snapchain/guides/syncing-to-db\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.neynar.com/snapchain/guides/syncing-to-db#article\",\"headline\":\"Sync Snapchain to Postgres\",\"name\":\"Sync Snapchain to Postgres\",\"description\":\"Mirror Snapchain data to a Postgres database for convenient access\",\"url\":\"https://docs.neynar.com/snapchain/guides/syncing-to-db\",\"mainEntityOfPage\":{\"@id\":\"https://docs.neynar.com/snapchain/guides/syncing-to-db#webpage\"},\"dateModified\":\"2026-02-02T05:12:27.635Z\",\"publisher\":{\"@id\":\"https://docs.neynar.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.neynar.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Neynar\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Neynar\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/snapchain/guides/syncing-to-db.md","siteName":"Neynar","nav":{"global":{"anchors":[{"anchor":"Status","icon":"signal","href":"https://status.neynar.com/"},{"anchor":"Blog","icon":"newspaper","href":"https://neynar.com/blog"}]},"tabs":[{"tab":"Home","pages":[{"title":"Home","href":"/"}]},{"tab":"Tutorials","pages":[{"title":"Tutorials","href":"/docs/getting-started-with-neynar"}]},{"tab":"REST API Reference","pages":[{"title":"REST API Reference","href":"/reference/quickstart"}]},{"tab":"Node.js SDK","pages":[{"title":"Node.js SDK","href":"/nodejs-sdk/overview"}]},{"tab":"Mini Apps","pages":[{"title":"Mini Apps","href":"/miniapps/overview"}]},{"tab":"Learn","pages":[{"title":"Learn","href":"/farcaster/overview"}]},{"tab":"Snapchain","groups":[{"group":"Overview","pages":[{"title":"What is Snapchain?","sidebarTitle":"Overview","href":"/snapchain/overview"},{"title":"Whitepaper","sidebarTitle":"Whitepaper","href":"/snapchain/whitepaper"},{"title":"Getting Started","sidebarTitle":"Getting Started","href":"/snapchain/getting-started"}]},{"group":"Guides","pages":[{"title":"Run Snapchain on AWS","description":"Step-by-step guide to running a Snapchain node on AWS EC2","sidebarTitle":"Running a Node","href":"/snapchain/guides/running-a-node"},{"title":"Sync Snapchain to Postgres","sidebarTitle":"Sync to Database","href":"/snapchain/guides/syncing-to-db"},{"title":"Migrating to Snapchain from Hubble","description":"Guide for migrating your application from Hubble to Snapchain","sidebarTitle":"Migration Guide","href":"/snapchain/guides/migrating-to-snapchain"},{"title":"Writing to Snapchain","sidebarTitle":"Writing Messages","href":"/snapchain/guides/writing-messages"}]},{"group":"Data Types","pages":[{"title":"Messages","sidebarTitle":"Messages","href":"/snapchain/datatypes/messages"},{"title":"Events","sidebarTitle":"Events","href":"/snapchain/datatypes/events"}]},{"group":"gRPC API","pages":[{"title":"gRPC API","sidebarTitle":"Overview","href":"/snapchain/grpcapi/grpcapi"},{"title":"Blocks API","sidebarTitle":"Blocks","href":"/snapchain/grpcapi/blocks"},{"title":"Casts API","sidebarTitle":"Casts","href":"/snapchain/grpcapi/casts"},{"title":"Events API","sidebarTitle":"Events","href":"/snapchain/grpcapi/events"},{"title":"Fids API","sidebarTitle":"Fids","href":"/snapchain/grpcapi/fids"},{"title":"Links API","sidebarTitle":"Links","href":"/snapchain/grpcapi/links"},{"title":"Message API","sidebarTitle":"Message","href":"/snapchain/grpcapi/message"},{"title":"Metadata API","sidebarTitle":"Metadata","href":"/snapchain/grpcapi/metadata"},{"title":"OnChainEvents API","sidebarTitle":"OnChain Events","href":"/snapchain/grpcapi/onchain"},{"title":"Reactions API","sidebarTitle":"Reactions","href":"/snapchain/grpcapi/reactions"},{"title":"Storage API","sidebarTitle":"Storage","href":"/snapchain/grpcapi/storagelimits"},{"title":"UserData API","sidebarTitle":"UserData","href":"/snapchain/grpcapi/userdata"},{"title":"Username Proofs API","sidebarTitle":"Username Proofs","href":"/snapchain/grpcapi/usernameproof"},{"title":"Verifications API","sidebarTitle":"Verifications","href":"/snapchain/grpcapi/verification"}]},{"group":"HTTP API","pages":[{"title":"HTTP API","sidebarTitle":"Overview","href":"/snapchain/httpapi/httpapi"},{"title":"Info API","sidebarTitle":"Info","href":"/snapchain/httpapi/info"},{"title":"Casts API","sidebarTitle":"Casts","href":"/snapchain/httpapi/casts"},{"title":"Events API","sidebarTitle":"Events","href":"/snapchain/httpapi/events"},{"title":"Fids API","sidebarTitle":"Fids","href":"/snapchain/httpapi/fids"},{"title":"Links API","sidebarTitle":"Links","href":"/snapchain/httpapi/links"},{"title":"Message API","sidebarTitle":"Message","href":"/snapchain/httpapi/message"},{"title":"OnChain API","sidebarTitle":"OnChain","href":"/snapchain/httpapi/onchain"},{"title":"Reactions API","sidebarTitle":"Reactions","href":"/snapchain/httpapi/reactions"},{"title":"Storage API","sidebarTitle":"Storage","href":"/snapchain/httpapi/storagelimits"},{"title":"UserData API","sidebarTitle":"UserData","href":"/snapchain/httpapi/userdata"},{"title":"Username Proofs API","sidebarTitle":"Username Proofs","href":"/snapchain/httpapi/usernameproof"},{"title":"Verifications API","sidebarTitle":"Verifications","href":"/snapchain/httpapi/verification"}]},{"group":"Reference","pages":[{"title":"Contracts","icon":"arrow-up-right","href":"/snapchain/reference/contracts"}]}]},{"tab":"Get Help →","href":"mailto:support@ns.com"}]},"basePath":"","title":"Neynar Documentation","buildId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","deploymentId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","dynamics":[],"chunks":[]}