{"id":49535232,"url":"https://github.com/dranxx/drxporter","last_synced_at":"2026-05-02T10:02:46.259Z","repository":{"id":352693117,"uuid":"1216222410","full_name":"DranxX/DrXporter","owner":"DranxX","description":"DrXporter is a two-way synchronization bridge between Roblox Studio and your local filesystem, enabling seamless editing of scripts and instances in your preferred code editor with real-time bidirectional updates.","archived":false,"fork":false,"pushed_at":"2026-04-20T18:05:28.000Z","size":84,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-20T19:36:23.701Z","etag":null,"topics":["binary","roblox","roblox-plugin","vscode"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DranxX.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2026-04-20T17:34:04.000Z","updated_at":"2026-04-20T18:06:08.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/DranxX/DrXporter","commit_stats":null,"previous_names":["dranxx/drxporter"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/DranxX/DrXporter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DranxX%2FDrXporter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DranxX%2FDrXporter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DranxX%2FDrXporter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DranxX%2FDrXporter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DranxX","download_url":"https://codeload.github.com/DranxX/DrXporter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DranxX%2FDrXporter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32530176,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-02T01:12:54.858Z","status":"online","status_checked_at":"2026-05-02T02:00:05.923Z","response_time":132,"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":["binary","roblox","roblox-plugin","vscode"],"created_at":"2026-05-02T10:02:34.084Z","updated_at":"2026-05-02T10:02:46.209Z","avatar_url":"https://github.com/DranxX.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DrXporter\n\n\u003e **⚠️ Notice:** This is a personal project and may be discontinued or updated infrequently. Feel free to modify the UI to suit your own needs.\n\nTwo-way sync system between Roblox Studio and your local filesystem. Export scripts and instances from Studio to organized local files, edit them in your favorite editor, and sync changes back — all in real-time.\n\n## How It Works\n\nDrXporter consists of two parts that communicate over a local HTTP bridge:\n\n```\nRoblox Studio ←→ Plugin (Luau) ←→ Bridge Server (Node.js) ←→ Local Filesystem\n```\n\n- **Roblox Plugin** — Installed in Roblox Studio. Provides a UI to select instances, choose which properties to export, and manages the connection to the local bridge server.\n- **Local Binary** — A Node.js CLI server that runs on your machine. Handles filesystem read/write, caching, UUID tracking, schema validation, and bidirectional sync with the plugin.\n\nEvery exported instance is tracked by a `drxporter-uuid` attribute. This allows the system to reliably map Roblox instances to local files, even after renames or moves.\n\n## Filesystem Layout\n\nExported scripts follow a Rojo-compatible layout:\n\n```\nWorkspace/\n  Map/\n    Door/\n      Script.server.lua\n    Door.instance.json\n```\n\n| Extension | Script Type |\n|---|---|\n| `.server.lua` | `Script` |\n| `.client.lua` | `LocalScript` |\n| `.lua` | `ModuleScript` |\n\nNon-script instances are stored as `.instance.json` files containing their properties, attributes, and tags.\n\n## Features\n\n- **Bidirectional live sync** — Edit scripts in Studio or your editor; changes propagate both ways automatically.\n- **Selective export** — Choose exactly which instances and properties to export via the plugin UI.\n- **UUID-based tracking** — Reliable instance-to-file mapping that survives renames and reparenting.\n- **Cache scoping** — Cache is scoped by `GameId` and `PlaceId`, so multiple places don't conflict.\n- **Strict diagnostics** — Stop-on-error behavior with detailed error codes and reporting.\n- **Parent chain preservation** — Parent hierarchy is always included for selected descendants.\n\n## Prerequisites\n\n- [Node.js](https://nodejs.org/) v20+\n- [Rojo](https://github.com/rojo-rbx/rojo) v7.4+ (for building the plugin)\n- [Aftman](https://github.com/LPGhatguy/aftman) (optional, manages Rojo/Selene/StyLua toolchain)\n\n## Installation\n\n```bash\ngit clone https://github.com/DranxX/Drxporter.git\ncd Drxporter\nnpm install\n```\n\n## Build\n\n### Build Everything\n\n```bash\nnpm run build:all\n```\n\nThis produces:\n- `output/roblox-plugin/drxporter-plugin.rbxmx` — Install this in Roblox Studio\n- `output/vscode-binary/drxporter` — Linux/macOS bridge binary\n- `output/vscode-binary/drxporter-windows.exe` — The Windows bridge executable\n\n### Build Plugin Only\n\n```bash\nnpm run build:plugin\n```\n\nOutput:\n- `output/roblox-plugin/drxporter-plugin.rbxmx`\n\n### Build Linux/macOS Binary\n\n```bash\nnpm run build:binary\n```\n\nOutput:\n- `output/vscode-binary/drxporter`\n\n### Build Windows Binary\n\n```bash\nnpm run build:binary -- --windows\n```\n\nOutput:\n- `output/vscode-binary/drxporter-windows.exe`\n\nThe `--windows` build uses `@yao-pkg/pkg` to package the Node.js bridge into a Windows executable. The generated target follows your current machine architecture:\n- `x64` host → `node20-win-x64`\n- `arm64` host → `node20-win-arm64`\n\nIf you are inside WSL, use the Linux/macOS binary (`output/vscode-binary/drxporter`). Running the Windows executable from WSL goes through WSLInterop and uses the Windows network stack, so Linux tools like `lsof` may not show the process that is blocking a port.\n\nIf Windows reports `EADDRINUSE` even though nothing appears in `netstat`, the port may be reserved by Windows rather than used by a normal process. Check reserved ranges with:\n\n```bat\nnetsh interface ipv4 show excludedportrange protocol=tcp\n```\n\n## Usage\n\n### 1. Start the Bridge Server\n\nLinux/macOS:\n\n```bash\n./output/vscode-binary/drxporter\n```\n\nWindows PowerShell:\n\n```powershell\n.\\drxporter-windows.exe\n```\n\nThe bridge starts on `127.0.0.1:51234` by default. If `51234` is unavailable, DrXporter automatically tries `51235`, `51236`, and so on.\n\nYou can choose the starting port manually:\n\n```powershell\n.\\drxporter-windows.exe --port 51234\n```\n\nMake sure the port in the Roblox plugin connect screen matches the port printed by the bridge server. If the bridge logs `Bridge server listening on 127.0.0.1:51235`, enter `51235` in the plugin.\n\nFor development with hot-reload:\n\n```bash\nnpm run dev\n```\n\n### 2. Connect from Roblox Studio\n\n1. Install the plugin (`drxporter-plugin.rbxmx`) in Roblox Studio.\n2. Open the DrXporter widget (it docks to the right panel).\n3. Click **Connect** — the plugin will connect to the local bridge server.\n\n### 3. Export\n\nSelect instances in the Explorer tree within the plugin UI, choose which properties to include, and hit Export. Scripts and instance data will be written to your local workspace.\n\n### 4. Edit \u0026 Sync\n\nEdit the exported `.lua` files in any editor. Changes are automatically detected by the file watcher and synced back to Studio. Edits made in Studio are also pushed to the local files.\n\n## Project Structure\n\n```\ndrxporter/\n├── roblox-plugin/          # Roblox Studio plugin (Luau)\n│   ├── src/plugin/         # Plugin source\n│   │   ├── ui/             # UI components and views\n│   │   ├── serializer/     # Instance → file serialization\n│   │   ├── deserializer/   # File → instance deserialization\n│   │   └── diagnostics/    # Error codes and reporting\n│   ├── test/               # Plugin tests\n│   └── scripts/            # Build and packaging scripts\n├── vscode-binary/          # Local bridge server (TypeScript)\n│   ├── src/\n│   │   ├── bridge/         # HTTP server, router, handlers\n│   │   ├── cache/          # Cache store, UUID index\n│   │   ├── workspace/      # Filesystem layout and tree operations\n│   │   ├── exporter/       # Script and instance export logic\n│   │   ├── importer/       # Script and instance import logic\n│   │   ├── serialization/  # JSON serialization for instances\n│   │   └── diagnostics/    # Error codes and reporting\n│   └── test/               # Binary tests\n├── shared/                 # Shared types, schemas, and validation\n│   └── src/\n│       ├── types/          # TypeScript type definitions\n│       ├── schema/         # Instance, cache, and settings schemas\n│       ├── validation/     # Schema and property validation\n│       ├── mapping/        # File naming and parent resolution\n│       └── constants/      # Shared constants\n├── scripts/                # Root build orchestration\n└── output/                 # Build artifacts\n```\n\n## Configuration\n\nThe bridge server defaults:\n\n| Setting | Default |\n|---|---|\n| Host | `127.0.0.1` |\n| Port | `51234` |\n| Protocol Version | `1.0.0` |\n\n## License\n\nThis project is licensed under the [GNU General Public License v3.0](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdranxx%2Fdrxporter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdranxx%2Fdrxporter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdranxx%2Fdrxporter/lists"}