layout layout.njk title Terrace - A simple structured data language description A simple structured data syntax for configuration, content authoring, and DSLs. Terrace gets out of your way to let you just write Section light class pt-24 flex flex-col gap-16 md:flex-row lg:gap-48 Block class flex flex-col gap-8 w-full items-start Logo light class hidden lg:flex Markdown class prose-ul:list-none A simple structured data syntax for - **Configuration** - **Content authoring** - **DSLs** Terrace gets out of your way to let you - **just write** Button primary href /docs/javascript/#getting-started Get Started CodeExample height 350px terrace title Terrace - A simple structured data language description A simple structured data syntax for configuration, content authoring, and DSLs. Terrace gets out of your way to let you just write markdown A simple structured data syntax for - **Configuration** - **Content authoring** - **DSLs** Terrace gets out of your way to let you - **just write** json { "title": "Terrace - A simple structured data language", "description": "A simple structured data syntax for configuration, content authoring, and DSLs.\nTerrace gets out of your way to let you just write", "markdown": "A simple structured data syntax for\n - **Configuration**\n - **Content authoring**\n - **DSLs**\n\nTerrace gets out of your way to let you\n - **just write**" } yaml title: Terrace - A simple structured data language description: | A simple structured data syntax for configuration, content authoring, and DSLs. Terrace gets out of your way to let you just write markdown: | A simple structured data syntax for - **Configuration** - **Content authoring** - **DSLs** Terrace gets out of your way to let you - **just write** toml title = "Terrace - A simple structured data language" description = """ A simple structured data syntax for configuration, content authoring, and DSLs. Terrace gets out of your way to let you just write""" markdown = """ A simple structured data syntax for - **Configuration** - **Content authoring** - **DSLs** Terrace gets out of your way to let you - **just write**""" Section dark Heading 2 Uses Block class flex flex-col space-between gap-16 md:flex-row lg:gap-48 Block class max-w-prose Block class flex gap-4 items-center mb-4 Icon settings Heading 3 Configuration class mb-0 Markdown Terrace’s concise syntax (or lack thereof) makes it a great fit for configuration files. Less verbose than JSON without the wild unpredictability and hidden syntax pitfalls that come with YAML. If you wish, you can build in your own input validation and type casting while parsing configuration files. Block class max-w-prose Block class flex gap-4 items-center mb-4 Icon feather Heading 3 Content Authoring class mb-0 Markdown An unopinionated, indent-based syntax allows fulls blocks of plain-text or markup languages (such as markdown) to be embedded inside of Terrace documents. This enables effortless mixing of data, prose, and functional blocks in human-written documents. No more need for clumsy frontmatter or custom Markdown extensions! Block class max-w-prose Block class flex gap-4 items-center mb-4 Icon code Heading 3 Domain-Specific Languages class mb-0 Markdown Terrace documents, at their core, are effectively their own AST (Abstract Syntax Tree). Every time you parse a Terrace document you’ve essentially parsed your own DSL. The core libraries are designed with this in mind, exposing ergonomic tools while getting out of your way as much as possible, so you can make Terrace your own. Button primary class inline-block mt-8 See Examples Section light Heading 2 Core Block class flex flex-col space-between gap-16 md:flex-row lg:gap-48 Block Heading 3 Tiny - Really Tiny class mb-4 Markdown The C version of the core parser is ~30 lines. Most other implementations are of comparable size. Heading 3 Easy to Implement class mb-4 mt-16 Markdown Need to use Terrace in another runtime? The tiny core and reliance on rudimentary control structures makes that a cinch! Block Heading 3 Zero Dependencies class mb-4 Markdown All Terrace implementations rely only on the built-ins of their language. The header-only C core has no dependencies, not even libc. Heading 3 No Dynamic Memory class mb-4 mt-16 Markdown Terrace allocates no dynamic memory of its own, working entirely on the stack. A great fit for resource-constrained environments. Block Heading 3 Unopinionated class mb-4 Markdown Terrace makes as few assumptions as possible about how you intend to use it, leaving you with the tools you need to use it as you see fit. Heading 3 Available in 3+ languages class mb-4 mt-16 Markdown At launch, Terrace has a reference C implementation, a TypeScript/JavaScript implementation, and a Python version available as well. We’ll be adding more as time permits! Button primary class inline-block mt-8 Add a Language Section dark Heading 2 Learn More Block class flex flex-col space-between gap-16 md:flex-row lg:gap-48 Block class max-w-prose Block class flex gap-4 items-center mb-4 Icon info Heading 3 About href /about/ class mb-0 Markdown Why does Terrace exist? What is it based on? What are the development goals? Block class max-w-prose Block class flex gap-4 items-center mb-4 Icon file-text Heading 3 Documentation href /docs/javascript/ class mb-0 Markdown Setup instructions, API documentation, and recipes for how to perform common tasks with Terrace. Block class max-w-prose Block class flex gap-4 items-center mb-4 Icon users Heading 3 Contribute class mb-0 Markdown Join the community! Help out by answering issues, expanding documentation, or building additional language implementations! Footer