{"id":13776451,"url":"https://github.com/depatchedmode/simplest-frame","last_synced_at":"2025-04-11T14:32:47.090Z","repository":{"id":219655636,"uuid":"749324477","full_name":"depatchedmode/simplest-frame","owner":"depatchedmode","description":"The simplest Farcaster Frame possible","archived":false,"fork":false,"pushed_at":"2024-07-07T22:30:47.000Z","size":14700,"stargazers_count":110,"open_issues_count":6,"forks_count":37,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-04-10T22:48:15.872Z","etag":null,"topics":["farcaster","farcaster-frames","farcaster-protocol","frame","netlify"],"latest_commit_sha":null,"homepage":"https://warpcast.com/depatchedmode/0x0dbb53c2","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/depatchedmode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-28T08:36:27.000Z","updated_at":"2025-03-27T18:38:15.000Z","dependencies_parsed_at":"2024-02-20T23:23:31.438Z","dependency_job_id":"cd6ed49e-8f15-491f-aeff-1d9988a0116c","html_url":"https://github.com/depatchedmode/simplest-frame","commit_stats":null,"previous_names":["depatchedmode/simplest-frame"],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/depatchedmode%2Fsimplest-frame","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/depatchedmode%2Fsimplest-frame/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/depatchedmode%2Fsimplest-frame/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/depatchedmode%2Fsimplest-frame/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/depatchedmode","download_url":"https://codeload.github.com/depatchedmode/simplest-frame/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248419703,"owners_count":21100233,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["farcaster","farcaster-frames","farcaster-protocol","frame","netlify"],"created_at":"2024-08-03T18:00:26.248Z","updated_at":"2025-04-11T14:32:47.064Z","avatar_url":"https://github.com/depatchedmode.png","language":"TypeScript","readme":"![poster-animated](https://github.com/depatchedmode/simplest-frame/assets/84613835/7dadc2cb-7410-4e8d-b8bb-6c314655e5fc)\n\n## A zero-cost, zero-framework, dynamic Farcaster Frame template\n\nThis is the \"simplest\" version of a Frame that can do all of the things a Frame should be able to do. It may be more than you need. It may be less. But it's a great place to start, IMHO. And it is indebted to all the great work by the team over at https://framesjs.org\n\n### My needs for starting this were:\n\n1. **🚱 Zero Framework:** Didn't want a framework baked in, and most options default to Next.js/React. No offense, but those seem like overkill.\n2. **🆓 Zero Cost:** Frames are for experiments! Experimenting is more fruitful when it's free.\n3. **🧱 Stable:** The domain and its attached state should be reasonably stable over the horizon of an experiment. Replit can only give you this at cost (see above)\n4. **🤸 Dynamic:** You can get all the above pretty easy with static files, but let's be real: we want dynamism or something! And, as social animals, we want to act and react.\n5. **🤤 Small:** and hopefully easy. Nobody to impress here. If my quite smooth brain can write this, your quite prune-like brain can understand it to.\n6. **😎 Cool Tech:** We want to be at the 🤬 edge here, people! I admit this is somewhat in tension with \"simplest\".\n\n### Features\n\n+ **⑃ Flow Definition**: Define button \u0026 input behaviour within each frame file.\n+ **🎇 Static \u0026 Dynamic Images**: Support for both static \u0026 dynamic frame images.\n+ **🧐 Validate trustedData**: Verify the current payload's `trustedData` via Farcaster Hubs (eg. wield.co), to protect against tomfoolery.\n+ **⌨️ Text inputs**: Accept that UGC with byte-level protection. Our `safeDecode` function leverages `dompurify` to give you a literal, and *helpful* purity test. The judgement of whether the content meets your standards is still up to you, though.\n+ **↗️ Redirect Support:** Because frames can't do everything ... yet! And, doggonit, there's a whole *world* ~~*wide* *web*~~ out there for y'all to explore.\n+ **🎟️ Mint from frame (COMING SOON):** Using Syndicate + Base, this boilerplate gives you what you need to make random interactions with your frame *unforgettable*. Is that a good idea? That sounds like a you problem.\n+ **🔐 Anti-theft:** Don't bet the engagement farm! Bind your Frame to a specific cast or account so nobody else can get your likes, follows, recasts ... and respect. Capisci?\n\n### Example\n\n![simplest-frame](https://github.com/depatchedmode/simplest-frame/assets/84613835/1ca2f2e6-767d-497a-ab88-96e26a7cbef8)\n[https://warpcast.com/depatchedmode/0xecad681e](https://warpcast.com/depatchedmode/0x0dbb53c2)\n\n### Getting started\n\n1. Clone the repo\n2. Install the [Netlify CLI](https://docs.netlify.com/cli/get-started/)\n3. Copy `sample.env` to `.env` and add:\n    + your Netlify Key, for deploys: `NETLIFY_AUTH_TOKEN`\n    + a [Wield Key](https://docs.wield.co/farcaster/api) for reading Farcaster state: `WIELD_API_KEY`\n4. `npm install`\n5. `netlify dev`\n\n### Testing\n\nThe Frames.js debugger can be run locally for testing by following these instructions: https://framesjs.org/guides/debugger#local-debugger-cli\n\n### Defining your Frame\n\nWe'll update with a proper docs soon*, but you'll find everything you need in the `public` and `src` directories.\n\nTo add a new frame, create a `{frameName}.js` file in `/src/frames` and add it as an import to `/src/frames/index.js`. You'll find examples of dynamic (eg. rendered HTML) and static (eg. served from the public folder) frames in that directory.\n\n*Y'all are welcome to help me write them.\n\n### Deploying\n\nThis should be as simple as [watching a git repo for commits](https://docs.netlify.com/site-deploys/create-deploys/).\n\nYou may encounter a 502 gateway error after deployment on the `/og-image` endpoint. This is a known issue with the `sharp` module this repo relies upon. We'll hopefully have this fixed by default, but for now there are workarounds. Follow this thread for fixes:\nhttps://github.com/depatchedmode/simplest-frame/issues/3\n\n### Caveats\n\nI am a designer larping as a dev. I invite your collaboration and feedback. Please be kind.\n\nAnd please! Can we make it simpler?\n","funding_links":[],"categories":["OSS Frames","Useful Tools \u0026 Libraries","Uncategorized"],"sub_categories":["Boilerplate repos","Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdepatchedmode%2Fsimplest-frame","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdepatchedmode%2Fsimplest-frame","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdepatchedmode%2Fsimplest-frame/lists"}