{"id":15567016,"url":"https://github.com/gianluigip/spectacle","last_synced_at":"2025-08-25T16:03:33.014Z","repository":{"id":42447193,"uuid":"451895866","full_name":"gianluigip/spectacle","owner":"gianluigip","description":"Living Documentation for Distributed Systems","archived":false,"fork":false,"pushed_at":"2023-10-04T23:48:23.000Z","size":1511,"stargazers_count":6,"open_issues_count":5,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-29T13:10:55.128Z","etag":null,"topics":["bdd","documentation-tool","kotlin","testing"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gianluigip.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2022-01-25T13:50:43.000Z","updated_at":"2023-01-31T19:29:24.000Z","dependencies_parsed_at":"2025-03-06T21:43:06.912Z","dependency_job_id":null,"html_url":"https://github.com/gianluigip/spectacle","commit_stats":null,"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/gianluigip/spectacle","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gianluigip%2Fspectacle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gianluigip%2Fspectacle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gianluigip%2Fspectacle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gianluigip%2Fspectacle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gianluigip","download_url":"https://codeload.github.com/gianluigip/spectacle/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gianluigip%2Fspectacle/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272092449,"owners_count":24871953,"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","status":"online","status_checked_at":"2025-08-25T02:00:12.092Z","response_time":1107,"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":["bdd","documentation-tool","kotlin","testing"],"created_at":"2024-10-02T17:09:38.383Z","updated_at":"2025-08-25T16:03:32.892Z","avatar_url":"https://github.com/gianluigip.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Maven Central](https://img.shields.io/maven-central/v/io.github.gianluigip/spectacle-dsl-bdd?label=Maven%20Central)](https://search.maven.org/artifact/io.github.gianluigip/spectacle-dsl-bdd)\n[![Docker](https://img.shields.io/docker/v/gianluigipp/spectacle-central/latest?label=Docker)](https://hub.docker.com/r/gianluigipp/spectacle-central)\n\n# Spectacle\n\n### Living Documentation for Distributed Systems\n\nIn modern distributed systems the behavior of the product is defined across multiple components and\nservices, and usually developed by multiple teams, as a result, the documentation is fragmented and\ndifficult to find.\n\nAdditionally, the system tends to change faster than the documentation which makes the latter\nunreliable.\n\nSpectacle provides a solution for generating documentation from the multiple codebases in a modern\nsystem and then storing it in a central repository that anyone can access.\n\nIt has two main components:\n\n* `spectacle-dsl`: a Kotlin lib for transforming regular tests into specs that can be published to a\n  central repository of specifications.\n* `spectacle-central`: a repository for specifications that allow to find and share the behaviour of\n  all the features in the system.\n\nSpectacle follows the philosophy that only the code and by extension the tests provide accurate\ndocumentation of the system, so it provides a DSL for writing readable tests that can be published\ninto a central repository to allows everyone to review.\n\n## [Spectacle DSL](./spectacle-dsl/spectacle-dsl-publisher/README.md)\n\nA Kotlin multiplatform library for generating documentation from tests and Markdown files, it can be\nused as a standalone tool for improving the readability of tests or in combination\nwith `Spectacle Central` to generate living documentation.\n\nAdd dependencies:\n\n```kotlin\n  testImplementation(\"io.github.gianluigip:spectacle-dsl-bdd:VERSION\")\n  testImplementation(\"io.github.gianluigip:spectacle-dsl-assertions:VERSION\")\n  testImplementation(\"io.github.gianluigip:spectacle-dsl-publisher:VERSION\")\n  testImplementation(\"io.github.gianluigip:spectacle-dsl-http:VERSION\")\n  testImplementation(\"io.github.gianluigip:spectacle-dsl-protobuf:VERSION\")\n```\n\nExample of a JVM spec class:\n\n```kotlin\n@Feature(\"First Feature\", description = \"Description defining the feature.\")\n@ExtendWith(JUnitSpecificationReporter::class)\nclass JunitExampleTest {\n\n    @Test\n    @Specification\n    fun `DSL allow to write specs with minimum overhead`() =\n        given(\"a test with multiple steps\") {\n        } whenever \"it executes\" run {\n        } then \"it should register all the BDD steps\" runAndFinish {\n        }\n}\n```\n\nReview [Spectacle DSL README](./spectacle-dsl/spectacle-dsl-publisher/README.md) for more details.\n\n## [Spectacle Central](./spectacle-central/README.md)\n\nRepository for the living documentation generated by `Spectacle DSL`, it allows to centralize the\ndocumentation generated from multiple executions of the `DSL` across multiple repositories, so even\nthough the docs are generated from multiple sources it can be queried from a central place which\nincrease the value for the organization as a whole.\n\n![Specifications Page](./spectacle-central/docs/images/SpecificationsPage.png)\n\n### [Live Demo](https://spectacle-central.herokuapp.com/)\n\n* Username: `guest`\n* Password: `guest`\n\nReview [Spectacle Central README](./spectacle-central/README.md) for more details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgianluigip%2Fspectacle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgianluigip%2Fspectacle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgianluigip%2Fspectacle/lists"}