{"id":34950408,"url":"https://github.com/valbuild/val","last_synced_at":"2026-05-14T00:02:00.881Z","repository":{"id":208625620,"uuid":"585056664","full_name":"valbuild/val","owner":"valbuild","description":"Val -  content - super-charged - hard-coded ","archived":false,"fork":false,"pushed_at":"2026-05-04T21:39:59.000Z","size":15754,"stargazers_count":27,"open_issues_count":44,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-04T23:37:30.750Z","etag":null,"topics":["cms","nextjs","react","typescript"],"latest_commit_sha":null,"homepage":"https://val.build","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/valbuild.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-01-04T07:53:56.000Z","updated_at":"2026-04-27T16:22:13.000Z","dependencies_parsed_at":"2026-03-25T00:05:22.300Z","dependency_job_id":null,"html_url":"https://github.com/valbuild/val","commit_stats":null,"previous_names":["valbuild/val"],"tags_count":1489,"template":false,"template_full_name":null,"purl":"pkg:github/valbuild/val","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valbuild%2Fval","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valbuild%2Fval/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valbuild%2Fval/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valbuild%2Fval/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/valbuild","download_url":"https://codeload.github.com/valbuild/val/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valbuild%2Fval/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32878368,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-10T13:40:02.631Z","status":"online","status_checked_at":"2026-05-11T02:00:05.975Z","response_time":120,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["cms","nextjs","react","typescript"],"created_at":"2025-12-26T21:28:43.256Z","updated_at":"2026-05-14T00:02:00.847Z","avatar_url":"https://github.com/valbuild.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cp align=\"center\"\u003e\n    \u003ca href=\"https://val.build\"\u003e\n\u003csvg width=\"100\" height=\"100\" viewBox=\"0 0 944 944\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n\u003ccircle cx=\"472\" cy=\"472\" r=\"472\" fill=\"#1D1C28\"/\u003e\n\u003cg filter=\"url(#filter0_d_14_601)\"\u003e\n\u003cpath d=\"M181 348C181 345.791 182.791 344 185 344H320C322.209 344 324 345.791 324 348V602C324 604.209 322.209 606 320 606H185C182.791 606 181 604.209 181 602V348Z\" fill=\"#38CD80\"/\u003e\n\u003c/g\u003e\n\u003cg filter=\"url(#filter1_i_14_601)\"\u003e\n\u003ccircle cx=\"252\" cy=\"550\" r=\"24\" fill=\"#1E1F2A\"/\u003e\n\u003c/g\u003e\n\u003cpath d=\"M659.085 550.374H658.585H654.427C652.095 550.374 650.434 549.729 649.347 548.522C648.25 547.306 647.658 545.431 647.658 542.807V439.857C647.658 437.924 646.091 436.357 644.158 436.357H629.16C627.227 436.357 625.66 437.924 625.66 439.857V455.828C625.66 456.658 624.986 457.332 624.155 457.332C623.593 457.332 623.072 457.015 622.798 456.508C618.502 448.559 612.704 442.661 605.399 438.838C597.962 434.671 589.622 432.592 580.394 432.592C571.897 432.592 563.846 434.128 556.247 437.2C548.643 440.274 541.944 444.796 536.154 450.761L536.153 450.761C530.537 456.552 526.106 463.693 522.854 472.174C519.598 480.668 517.975 490.411 517.975 501.395V505.697C517.975 516.86 519.597 526.693 522.854 535.187C526.105 543.667 530.535 550.895 536.148 556.864L536.153 556.869L536.159 556.875C541.95 562.659 548.647 567.088 556.246 570.161L556.256 570.165C563.856 573.057 572.083 574.5 580.932 574.5C589.456 574.5 597.527 572.325 605.137 567.982C612.625 563.807 618.519 557.469 622.822 548.992C623.085 548.475 623.609 548.147 624.176 548.147H624.546C625.161 548.147 625.66 548.646 625.66 549.261C625.66 555.468 627.583 560.617 631.452 564.665L631.451 564.665L631.46 564.673C635.511 568.72 640.668 570.735 646.889 570.735H658.585H659.085H661.157H661.657H760C761.933 570.735 763.5 569.168 763.5 567.235V553.874C763.5 551.941 761.933 550.374 760 550.374H733.542C732.161 550.374 731.042 549.255 731.042 547.874V385C731.042 383.067 729.475 381.5 727.542 381.5H680.701C678.768 381.5 677.201 383.067 677.201 385V398.361C677.201 400.294 678.768 401.861 680.701 401.861H706.543C707.924 401.861 709.043 402.981 709.043 404.361V547.874C709.043 549.255 707.924 550.374 706.543 550.374H661.657H661.157H659.085ZM600.117 550.146L600.111 550.149C594.977 552.448 589.304 553.601 583.086 553.601C570.468 553.601 560.194 549.435 552.222 541.12C544.436 532.633 540.512 520.847 540.512 505.697V501.395C540.512 494.274 541.581 487.79 543.712 481.936L543.714 481.931C545.849 475.89 548.778 470.842 552.495 466.775C556.398 462.521 560.92 459.246 566.061 456.944C571.195 454.645 576.867 453.492 583.086 453.492C589.117 453.492 594.696 454.731 599.829 457.207L599.838 457.211L599.848 457.215C605.166 459.517 609.681 462.79 613.4 467.035L613.4 467.035L613.408 467.044C617.306 471.292 620.324 476.431 622.458 482.469L622.459 482.474C624.59 488.328 625.66 494.812 625.66 501.933V505.16C625.66 512.46 624.59 519.125 622.458 525.159C620.324 531.022 617.393 536.075 613.669 540.326C609.95 544.571 605.435 547.844 600.117 550.146ZM464.902 570.735C466.39 570.735 467.716 569.794 468.206 568.389L512.685 441.011C513.479 438.736 511.79 436.357 509.38 436.357H491.006C489.496 436.357 488.157 437.325 487.683 438.758L447.951 558.864C447.716 559.575 447.051 560.055 446.303 560.055C445.554 560.055 444.89 559.575 444.655 558.864L404.923 438.758C404.449 437.325 403.109 436.357 401.6 436.357H383.225C380.815 436.357 379.126 438.736 379.921 441.011L424.399 568.389C424.89 569.794 426.215 570.735 427.704 570.735H464.902Z\" fill=\"white\" stroke=\"white\"/\u003e\n\u003cdefs\u003e\n\u003cfilter id=\"filter0_d_14_601\" x=\"127.464\" y=\"290.464\" width=\"250.072\" height=\"369.072\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"\u003e\n\u003cfeFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/\u003e\n\u003cfeColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/\u003e\n\u003cfeOffset/\u003e\n\u003cfeGaussianBlur stdDeviation=\"26.768\"/\u003e\n\u003cfeComposite in2=\"hardAlpha\" operator=\"out\"/\u003e\n\u003cfeColorMatrix type=\"matrix\" values=\"0 0 0 0 0.219608 0 0 0 0 0.803922 0 0 0 0 0.501961 0 0 0 0.3 0\"/\u003e\n\u003cfeBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_14_601\"/\u003e\n\u003cfeBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_14_601\" result=\"shape\"/\u003e\n\u003c/filter\u003e\n\u003cfilter id=\"filter1_i_14_601\" x=\"228\" y=\"526\" width=\"48\" height=\"48\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"\u003e\n\u003cfeFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/\u003e\n\u003cfeBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/\u003e\n\u003cfeColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/\u003e\n\u003cfeOffset/\u003e\n\u003cfeGaussianBlur stdDeviation=\"6\"/\u003e\n\u003cfeComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\"/\u003e\n\u003cfeColorMatrix type=\"matrix\" values=\"0 0 0 0 0.219608 0 0 0 0 0.803922 0 0 0 0 0.501961 0 0 0 0.3 0\"/\u003e\n\u003cfeBlend mode=\"normal\" in2=\"shape\" result=\"effect1_innerShadow_14_601\"/\u003e\n\u003c/filter\u003e\n\u003c/defs\u003e\n\u003c/svg\u003e\n    \u003c/a\u003e\n    \u003cbr/\u003e\n  \u003c/p\u003e\n\u003c/p\u003e\n\n## Table of contents\n\n- [Installation](./packages/next/README.md#Installation)\n- [Introduction](#content-as-code)\n- [Examples](#examples)\n- [Documentation](#documentation)\n\n## Content as code\n\nVal is a CMS library where **content** is **TypeScript** / **JavaScript** files stored in your git repo.\n\nAs a CMS, Val is useful because:\n\n- editors can **change content** without having to ask developers to do it for them (and nobody wants that)\n- a **well-documented** way to **structure content**\n- **image**, **richtext**, ... support is built-in\n- built-in **visual editing** which lets editors click-then-edit content (and therefore **code**!) directly in your app\n  ![Visual editing](https://val.build/docs/images/visual-editing.png)\n- an embedded studio which lets editors navigate the content structure and make updates there\n  ![Studio](https://val.build/docs/images/studio.png)\n\n\u003cdetails\u003e\n\u003csummary\u003eDefinition: editor\u003c/summary\u003e\nAn editor in this context, is a non-technical person that edits content in your application (technical writer, proof-reader, legal, ...).\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\nBut, with the benefits of **hard-coded** content:\n\n- works seamlessly **locally** or with git **branches**\n- content is **type-checked** so you can spend less time on figuring out why something isn't working\n  ![Type check error](https://val.build/docs/images/type-check-error.png)\n- content can be refactored (change names, etc) just as if it was hard-coded (because it is)\n  ![Renaming](https://val.build/docs/images/renaming.gif)\n- works as normal with your **favorite IDE** without any plugins: search for content, references to usages, ...\n  ![References](https://val.build/docs/images/references.gif)\n- **no** need for **code-gen** and extra build steps\n- **fast** since the content is literally hosted with the application\n- content is **always there** and can never fail (since it is not loaded from somewhere)\n- no need to worry about **caching** since content is not fetched from some DB or cloud service\n- no need to manage different **environments** with different versions of content\n- works out of the box with Vercel **preview links**\n- **resolve conflicts** like you normally resolve conflicts: **in git**\n\nCompared to other CMSs, Val has the following advantages:\n\n- **easy** to _grok_: Val is designed to have a minimum of boilerplate and there's **0** query languages to learn\n- Vals abstraction model is based on **JSON** and TypeScript (Record, keyof). What this means is that there is nothing to learn (for you or your future colleagues): no \"a collection is...\" or a \"a document is sort of a...\" - just JSON and regular TypeScript types\n- **no signup** required to use it locally\n- **no fees** for content that is in your code: your content is your code, and your code is... yours\n- **minimal** API surface: Val is designed to not \"infect\" your code base\n- **easy to remove**: since your content is already in your code and Val is designed to have a minimal surface, it's easy to remove if you want to switch\n- eslint rules and [VS Code extension](https://marketplace.visualstudio.com/items?itemName=valbuild.vscode-val-build) for an even **better-than-hard-coded** developer experience\n\n\u003cdetails\u003e\n\u003csummary\u003eUpcoming feature: \u003cstrong\u003ei18n\u003c/strong\u003e\u003c/summary\u003e\nVal will soon have support for i18n. Follow this repository to get notified when this is the case.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eUpcoming feature: \u003cstrong\u003eremote content\u003c/strong\u003e\u003c/summary\u003e\nHaving hard-coded content is great for landing pages, product pages and other pages where the amount of content is manageable.\n\nHowever, checking in the 10 000th blog entry in git might feel wrong (though we would say it is ok).\n\nTherefore, Val will add `remote content` support which enables you to seamlessly move content to the cloud and back again as desired.\nYou code will still be the one truth, but the actual content will be hosted on [val.build](https://val.build).\n\n`.remote()` support will also make it possible to have remote images to avoid having to put them in your repository.\n\nThere will also be specific support for remote i18n, which will make it possible to split which languages are defined in code, and which are fetched from remote.\n\nMore details on `.remote()` will follow later.\n\n\u003c/details\u003e\n\n## When to NOT use Val\n\nVal is designed to work well on a single web-app, and currently only supports Next 14+ (more meta-frameworks will supported) and GitHub (more Git providers will follow).\n\nUnless your application fits these requirements, you should have a look elsewhere (at least for now).\n\nIn addition, if you have a \"content model\", i.e. content schemas, that rarely change and you plan on using them in a lot of different applications (web, mobile, etc), Val will most likely not be a great fit.\n\nIf that is the case, we recommend having a look at [Sanity](https://sanity.io) instead (we have no affiliation, but if we didn't have Val we would use Sanity).\n\n**NOTE**: Our experience is that, however nice it sounds, it is hard to \"nail\" the content model down. Usually content (on, for example, your landing page) is derived from what you want to present, not vice-versa. In addition, you should think carefully whether you _really_ want to present the exact same content on all these different surfaces.\n\n\u003cdetails\u003e\n  \u003csummary\u003eUpcoming feature: \u003cstrong\u003eexternal content\u003c/strong\u003e\u003c/summary\u003e\nVal will support external content, i.e. content from other Val projects, CMSs or DBs some time in the future.\n\u003c/details\u003e\n\n## Examples\n\nExamples can found [here](./examples).\n\n## Documentation\n\nVal currently only support Next.js.\n\nTo get started using Next.js, checkout the [README](./packages/next/README.md).\n\n## Get in touch\n\nJoin us on [discord](https://discord.gg/cZzqPvaX8k) to get help or give us feedback.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvalbuild%2Fval","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvalbuild%2Fval","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvalbuild%2Fval/lists"}