{"id":37604477,"url":"https://github.com/ara3d/bowerbird","last_synced_at":"2026-01-16T10:06:53.033Z","repository":{"id":189773737,"uuid":"681269733","full_name":"ara3d/bowerbird","owner":"ara3d","description":"Scripted C# Plug-in Framework for Revit","archived":false,"fork":false,"pushed_at":"2025-08-25T03:31:53.000Z","size":12331,"stargazers_count":55,"open_issues_count":1,"forks_count":7,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-08-25T06:41:28.092Z","etag":null,"topics":["aec","bim","csharp","revit","scripting-engine"],"latest_commit_sha":null,"homepage":"","language":"C#","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/ara3d.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,"zenodo":null}},"created_at":"2023-08-21T16:35:34.000Z","updated_at":"2025-08-25T03:31:56.000Z","dependencies_parsed_at":"2024-11-03T22:21:52.411Z","dependency_job_id":"97a78108-533e-4fab-a089-2ff6a8fe6c1f","html_url":"https://github.com/ara3d/bowerbird","commit_stats":null,"previous_names":["ara3d/bowerbird"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/ara3d/bowerbird","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ara3d%2Fbowerbird","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ara3d%2Fbowerbird/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ara3d%2Fbowerbird/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ara3d%2Fbowerbird/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ara3d","download_url":"https://codeload.github.com/ara3d/bowerbird/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ara3d%2Fbowerbird/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478049,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["aec","bim","csharp","revit","scripting-engine"],"created_at":"2026-01-16T10:06:52.954Z","updated_at":"2026-01-16T10:06:53.023Z","avatar_url":"https://github.com/ara3d.png","language":"C#","readme":"# \u003cimg width=\"64\" src=\"https://github.com/ara3d/bowerbird/assets/1759994/badd9bb6-61cd-409f-9088-19a9db3f519d\"/\u003e Bowerbird\n\nBowerbird accelerates C# tool and plug-in development by dynamically compiling C# source files.  \n\n## Current Release - Bowerbird for Revit 2025\n\nThe current release of Bowerbird is for Revit 2025 only. \n\n![Bowerbird Screenshot 2024-03-15 104808](https://github.com/ara3d/bowerbird/assets/1759994/b6457096-22ef-4946-9c6f-aea08fcebf74)\n\n## How Bowerbird works\n\nWhen Bowerbird starts up it scans a directory for C# source files (with the extension `.cs`), \nand attempts to compile them into a single assembly. \n\nFor Revit the source files can be found at: \n\n`%localappdata%\\Ara 3D\\Bowerbird for Revit 2025\\Scripts`.\n\nThe assembly is then loaded into memory and scanned for public classes which implement the \n`INamedCommand` interface.  \n\n```csharp\npublic interface INamedCommand : ICommand\n{\n   string Name { get; }\n   void NotifyCanExecuteChanged();\n}\n\npublic interface ICommand \n{\n    event EventHandler? CanExecuteChanged;\n    bool CanExecute(object? parameter);\n    void Execute(object? parameter);\n}\n```\n\nEach command is listed in the main interface of the application. Double clicking on the interface will launch it.\n\nFor Revit the \"argument\" passed to the Execute function will be an instance of [`UIApplication`](https://www.revitapidocs.com/2017/51ca80e2-3e5f-7dd2-9d95-f210950c72ae.htm). \n\nEditing and saving any file in the directory will trigger a recompilation of all files, and reloading of the commands.  \n\n## Sample Command\n\nFor convenience you can derive a command from a class called `NamedCommand` which provides\ndefault implementations of most functions.\n\n```csharp\n /// \u003csummary\u003e\n /// Displays the current active document in a window\n /// \u003c/summary\u003e\n public class CurrentDocument : NamedCommand\n {\n     public override string Name =\u003e \"Current Open Document\";\n\n     public override void Execute(object arg)\n     {\n         var app = (UIApplication)arg;\n         var doc = app.ActiveUIDocument?.Document;\n         if (doc == null)\n         {\n             MessageBox.Show(\"No document open\");\n         }\n         else\n         {\n             MessageBox.Show($\"Open document: {doc.PathName}\");\n         }\n     }\n }\n```\n\n## Compilation and Dependencies\n\nPrevious versions of Bowerbird, had a dependency on the Ara3D module, but now a library \ncalled [Ara3D.SDK](https://github.com/ara3d/ara3d-sdk) is consumed as a nuget package.\n\nAfter compilation a build-script called `post-build.bat` is run. This copies an add-in file \n`Ara3D.Bowerbird.Revit2025.addin` to the folder `%programdata%\\Autodesk\\Revit\\Addins\\2025`. \nThe depdendent DLLs are copied to the sub-folder `Ara3D.Bowerbird`. \n\nC# source files are copied into the folder `%localappdata%\\Ara 3D\\Bowerbird for Revit 2025\\Scripts\\`.\n\nThe final installer is an [Advanced Installer](https://www.advancedinstaller.com/) project. \n\n## Background and Motivation\n\n### Problem\n\nThere are several popular tools, particularly in the realm of 3D design software, which have an SDK with a C# API \nfor developing plug-ins. Our current focus is Autodesk Revit. \n\nTwo main challenges with plug-in development are:\n\n1. A lot of overhead and boilerplate for creating new tools\n2. A slow development cycle of build, compile, copy, and restart host application.   \n\nUsing separate languages for quick scripting and another for distributed plug-ins, fractures the community, \ncreates a cognitive load for developers, and is a barrier for some developers. \n  \n### Solution\n\nBy using a dynamic compilation library based on Roslyn one generic Bowerbird plug-in \ncan host many other plug-ins which can be dynamically compiled and modified without restarting the host application.\nThis means that we can quickly create new experiments, plug-ins, try out new ideas, or test hypotheses aboout \nour code.  \n\n## Issues and Feedback\n\nWe appreciate and welcome any feedback.\n\nPlease submit issues, suggestions, and questions [via the issues tracker](https://github.com/ara3d/bowerbird/issues).\n\n## Inspiration \n\n* [pyRevit](https://github.com/eirannejad/pyRevit) by [Ehsan Iran-Nejad](https://github.com/eirannejad).\n* [Revit.ScriptCS](https://github.com/sridharbaldava/Revit.ScriptCS) by [Sridhar Baldava](https://github.com/sridharbaldava)\n\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fara3d%2Fbowerbird","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fara3d%2Fbowerbird","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fara3d%2Fbowerbird/lists"}