localdeck 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,66 @@
1
+ # Changelog
2
+
3
+ ## 1.0.0 — Product launch
4
+
5
+ ### Project setup and configuration
6
+
7
+ - Initialize .localdeck from package scripts, preview detection with --dry-run, or define commands explicitly for other languages.
8
+ - Remember projects by configuration-file identity. Show unavailable projects with recovery errors instead of dropping them from the dashboard.
9
+ - Configure startup dependencies, service tags, and named profiles. Start prerequisites first and stop project services in reverse dependency order.
10
+ - Edit project nicknames, public/upstream ports, readiness checks, timing, and dependencies in project settings. Save configuration atomically; apply runtime changes after restart.
11
+ - Disable nickname Save when its normalized value is unchanged. Expand service configuration to the available page width.
12
+
13
+ ### Runtime and networking
14
+
15
+ - Keep health checks on the detected IPv4 or IPv6 listener, preventing routing to another project using the same port on a different loopback address. Ignore stale health-check results after an upstream change.
16
+
17
+ - Run existing development commands through a background daemon, with stable public ports and automatic upstream listener detection.
18
+ - Add native Windows process and TCP listener discovery through PowerShell, plus a dedicated Windows networking CI job. Remove built-in Windows/Linux forwarding without invoking the macOS installer.
19
+ - Provide project-qualified service identities and nickname-based localhost URLs. Reject ambiguous bare service names instead of selecting the wrong project.
20
+ - Inject PORT and LOCALDECK_URL and resolve service references for local communication. Support TCP and HTTP readiness checks and database endpoints.
21
+ - Keep terminal-owned and daemon-owned process lifecycles distinct. Clean up child process groups on stop, failed startup, and shutdown.
22
+ - Offer optional port-free URLs through a verified local forwarder, with macOS setup, retry, removal, and fallback to original port URLs.
23
+ - Add a Windows UAC installer for a persistent, loopback-only portproxy rule, guarded by a machine-level ownership marker, with verification and administrator-approved removal. Native elevated testing is pending.
24
+ - Cancel pending public-share startup during shutdown so tunnel startup does not delay service cleanup.
25
+
26
+ ### Dashboard navigation and controls
27
+
28
+ - Add dedicated /projects, /services, /settings, /about, and /changelog pages with direct links, refresh, and browser Back/Forward support.
29
+ - Render the requested page before daemon data loads, eliminating the All Services flash when refreshing Projects.
30
+ - Search configured and running services across projects. Start and stop services directly in the list; open service output in the Logs panel instead of a separate service page.
31
+ - Add a collapsible, resizable sidebar with saved preferences and a compact mobile layout.
32
+ - Align Local runtime, daemon connection, active-service count, and Logs in one footer row.
33
+ - Show an Enable Clean URLs action above Local runtime when Clean URLs are off. Enable forwarding directly, with pending and retry states.
34
+ - Center action labels and empty states while keeping service rows full-width and left-aligned. Use neutral keyboard focus indicators, underlined Logs controls, and a borderless close icon.
35
+ - Dismiss popup menus on outside interaction or Escape. Remove the redundant project Activity section.
36
+
37
+ ### Logs and troubleshooting
38
+
39
+ - Start and stop individual services from project pages, open their specific log tabs, and manage sharing with optional passwords, public URL copying, and Stop sharing. Display active public links beneath local service URLs in both service views.
40
+ - Distinguish sharing lifecycle events and tunnel requests with teal SHARE labels; keep application stdout separate.
41
+ - Stream service output live. Select multiple services in a bottom Logs panel, merge their output chronologically, or switch to individual service tabs.
42
+ - Filter retained output, follow new lines, resize the panel with pointer or keyboard, and remember its height.
43
+ - Configure the log-line limit in Settings from 100 to 5,000, with a default of 1,000. Apply it to live buffering and the combined view, and save the preference in the browser.
44
+ - Preserve record identity and ordering when merging history with live output. Retry failed history loads and keep removed sources available for deselection.
45
+ - Explain port conflicts with actionable recovery steps, including Vite strictPort and PORT configuration. Keep raw errors under Technical details and include guidance in startup logs.
46
+ - Record proxied HTTP requests and expose request inspection through the CLI/API. Support bounded GET/HEAD replay through the API.
47
+ - Generate local diagnostics with configuration, readiness failures, and recent logs, redacting environment values and recognized credentials.
48
+
49
+ ### CLI, sharing, and integrations
50
+
51
+ - Provide init, doctor, commands, up, run, ps, port, logs, requests, stop, open, and daemon-management commands, plus shorthand configured-service launches.
52
+ - Add --h and --v aliases for help and version alongside the standard flags.
53
+ - Share local HTTP services over HTTPS using cloudflared, with optional password protection and explicit share cleanup.
54
+ - Treat incoming public tunnel traffic as reachability confirmation when local DNS probes lag. Add masked share passwords with on-demand reveal and remove input focus outlines.
55
+ - Verify public tunnel connectivity before marking a share active. Keep tunnel startup and failure status in the daemon so refreshing the dashboard preserves it. Close the Share menu on submission and show the allocated URL beside its verification spinner. Show a spinner in the URL position while connecting and an inline error on failure. Suggest opening the pending link after one minute. Bound startup to two minutes and close unreachable tunnels with retry guidance.
56
+ - Forward shared HTTP and WebSocket requests using the upstream Host so Vite accepts tunnel traffic. Preserve the public hostname and HTTPS scheme in forwarded headers.
57
+ - Explain the separate cloudflared installation requirement in Settings, About, and platform-specific sharing errors, with official installation instructions.
58
+ - Expose project and service tools to MCP clients. Access diagnostics through the daemon package export instead of a relative source import.
59
+ - Authenticate CLI control and attach requests with an owner-only daemon token and validate browser origins for dashboard control requests.
60
+
61
+ ### Packaging and release validation
62
+
63
+ - Prepare one npm package containing the CLI, daemon, and bundled dashboard. Runtime requires Node.js 20 or newer; Bun is used for development and builds.
64
+ - Bundle self-hosted IBM Plex fonts, the LocalDeck icon, license text, and third-party notices.
65
+ - Adopt the LocalDeck Free-Use Proprietary License: free personal and commercial use, with restrictions on selling LocalDeck or charging for access to it.
66
+ - Add TypeScript/Svelte checks, unit and process integration tests, installed-package tests, and clean-build artifact verification.
package/LICENSE ADDED
@@ -0,0 +1,49 @@
1
+ LocalDeck Free-Use Proprietary License
2
+
3
+ Copyright (c) 2026 LocalDeck contributors. All rights reserved.
4
+
5
+ 1. Free use
6
+
7
+ Permission is granted, free of charge, to download, copy, install, and run
8
+ official, unmodified LocalDeck releases for personal or commercial use.
9
+ You may use LocalDeck to develop, test, and operate your own products and
10
+ services, including products and services that you sell. Your independently
11
+ created code, products, and outputs are not subject to this license merely
12
+ because you used LocalDeck to create or work on them.
13
+
14
+ 2. No resale or paid access
15
+
16
+ You must not sell, rent, sublicense, or charge for copies of LocalDeck or
17
+ access to LocalDeck, including through a paid bundle, hosted service,
18
+ managed service, or subscription. You may charge for your own products and
19
+ services developed or operated using LocalDeck, provided that you are not
20
+ selling LocalDeck itself or charging customers for access to it.
21
+
22
+ 3. Authorship and notices
23
+
24
+ You must not claim that you created LocalDeck, present it as your own
25
+ product, or remove or alter its copyright, license, or authorship notices.
26
+ Using LocalDeck does not require adding LocalDeck branding or attribution
27
+ to your own independently created products.
28
+
29
+ 4. Reserved rights
30
+
31
+ Except as expressly permitted above or required by applicable law,
32
+ modification, redistribution, and creation of derivative works of LocalDeck
33
+ require prior written permission from the copyright holders. Public
34
+ availability of the source code does not grant additional rights.
35
+
36
+ 5. Third-party components
37
+
38
+ Third-party components remain subject to their respective licenses, listed
39
+ in THIRD_PARTY_NOTICES.md in the distributed package. This license does not
40
+ restrict rights granted by those third-party licenses.
41
+
42
+ 6. Disclaimer
43
+
44
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
45
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
46
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
47
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
48
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
49
+ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,153 @@
1
+ # LocalDeck
2
+
3
+ **One place to run, inspect, and share your local development services.**
4
+
5
+ LocalDeck runs the commands your project already uses, gives web services stable local addresses, and brings their controls and logs into a browser dashboard. Use it for a single app or a monorepo with frontends, APIs, and database dependencies.
6
+
7
+ ## Install
8
+
9
+ Requires **Node.js 20 or newer**. The npm package includes the CLI, background daemon, and dashboard; Bun is only needed to develop LocalDeck.
10
+
11
+ ```sh
12
+ npm install -g localdeck
13
+ localdeck --version
14
+ ```
15
+
16
+ ## Quick start
17
+
18
+ In your application's directory:
19
+
20
+ ```sh
21
+ localdeck init --dry-run # Preview services detected from package.json
22
+ localdeck init # Save the .localdeck configuration
23
+ localdeck doctor # Check configuration and required tools
24
+ localdeck up # Start the project and its dependencies
25
+ ```
26
+
27
+ In another terminal:
28
+
29
+ ```sh
30
+ localdeck open # Open the dashboard
31
+ ```
32
+
33
+ The dashboard is served at `http://localhost:7777` by default. It remembers projects registered through the CLI. You can start and stop individual services, open local and shared links, and follow selected services in a resizable logs panel.
34
+
35
+ `localdeck up` runs in the foreground: **Ctrl-C stops the services it owns**. Services started from the dashboard continue in the background until you stop them or shut down the daemon.
36
+
37
+ ## What you get
38
+
39
+ - **Stable addresses:** keep a consistent local port even when the development server chooses another upstream port.
40
+ - **Project controls:** start one service or a whole project, with dependencies started in order and checked for readiness.
41
+ - **Clean URLs:** optional addresses such as `http://platform.web.localhost`, with a project nickname and port-80 forwarding enabled.
42
+ - **Combined logs:** select multiple services, switch between their tabs, filter output, and choose a display limit from 100 to 5,000 lines.
43
+ - **HTTPS sharing:** create temporary Cloudflare links with optional password protection, pending status, and shared-request logs.
44
+ - **Coding-agent access:** an MCP server for service inspection, controls, diagnostics data, and recorded GET/HEAD replay.
45
+
46
+ ## Configure your services
47
+
48
+ Create a `.localdeck` file in your project root, or edit the one generated by `init`:
49
+
50
+ ```json
51
+ {
52
+ "nickname": "platform",
53
+ "services": [
54
+ { "name": "api", "run": "npm run dev:api", "ready": "/health" },
55
+ { "name": "web", "run": "npm run dev:web", "after": "api" }
56
+ ]
57
+ }
58
+ ```
59
+
60
+ Replace the commands and health endpoint with your project's values. `after` starts the API before the web service and waits for readiness. Omit `ready` to use the default TCP check.
61
+
62
+ For a non-JavaScript service:
63
+
64
+ ```sh
65
+ localdeck init --name web --command 'python3 -m http.server {port}'
66
+ ```
67
+
68
+ LocalDeck supplies `PORT` and expands `{port}` to the application's upstream port. It can also detect listening ports on macOS, Linux, and Windows. Configure `upstream` explicitly when detection is unavailable. The optional `port` field is the stable proxy port, not the port your development server should bind.
69
+
70
+ See [configuration](https://github.com/AdstraliaDev1/local-deck/blob/main/docs/configuration.md) for working directories, profiles, environment references, database services, and advanced readiness checks.
71
+
72
+ ## Everyday commands
73
+
74
+ | Command | Purpose |
75
+ | --- | --- |
76
+ | `localdeck web` | Start the configured web service and its prerequisites. |
77
+ | `localdeck up --profile app` | Start a saved group of services. |
78
+ | `localdeck ps` | List service states, ports, and URLs. |
79
+ | `localdeck logs web -f` | Follow a service's output. |
80
+ | `localdeck requests web` | Inspect recent proxied requests. |
81
+ | `localdeck open web` | Open the local service URL. |
82
+ | `localdeck stop web` | Stop a service and its share. |
83
+ | `localdeck share web` | Create a share with a generated password. |
84
+ | `localdeck unshare web` | Close the share while keeping the service running. |
85
+ | `localdeck --h` / `localdeck --v` | Show help / version. |
86
+
87
+ When projects have the same service name, use `project/service` or the exact key shown by `localdeck ps`. See the [full command reference](https://github.com/AdstraliaDev1/local-deck/blob/main/docs/commands.md).
88
+
89
+ ## Share over HTTPS
90
+
91
+ Sharing requires **cloudflared**, installed separately and available on `PATH`. Local services and Clean URLs do not require it. Follow [Cloudflare's installation instructions](https://developers.cloudflare.com/tunnel/downloads/), then check:
92
+
93
+ ```sh
94
+ cloudflared --version
95
+ localdeck share web
96
+ ```
97
+
98
+ The CLI generates a password by default. Use `--password <password>` to choose one, or `--public` for an unprotected link. In the dashboard, choose **Share**, enter an optional password, and submit. A blank dashboard password creates an unprotected share.
99
+
100
+ The generated URL appears beside a spinner while LocalDeck checks connectivity. After one minute, the dashboard suggests opening the link yourself; a request reaching the public tunnel also confirms connectivity. Startup ends after two minutes if the link still cannot be verified. Pending and failed states survive a dashboard refresh. Protected links have a masked password with **Show/Hide**.
101
+
102
+ Quick Tunnel URLs are temporary and may have DNS delays. They stop when the service or daemon stops, and recreating a share changes its address. Cloudflare does not guarantee Quick Tunnel uptime. Named tunnels and custom public domains are not configured by LocalDeck v1.
103
+
104
+ ## Clean URLs and networking
105
+
106
+ Enable **Clean URLs** in Settings, or use the prompt above the dashboard footer. LocalDeck verifies forwarding before removing the port from links. Setup may request administrator approval on macOS or Windows. If forwarding is unavailable, the original port-number URLs remain usable.
107
+
108
+ CORS still belongs to your application. `http://localhost:3001`, `http://platform.web.localhost`, and a public HTTPS tunnel URL are different browser origins. Add the frontend origin you actually visit to your API's allowlist. LocalDeck does not rewrite CORS policies or application API URLs.
109
+
110
+ Windows process discovery and an administrator forwarder are implemented. Windows UAC installation, removal, and reboot persistence still need manual validation on Windows; see [platform details](https://github.com/AdstraliaDev1/local-deck/blob/main/docs/dashboard.md#windows).
111
+
112
+ ## Connect a coding agent
113
+
114
+ Add LocalDeck to an MCP client's server configuration:
115
+
116
+ ```json
117
+ {
118
+ "mcpServers": {
119
+ "localdeck": {
120
+ "command": "localdeck",
121
+ "args": ["mcp"]
122
+ }
123
+ }
124
+ }
125
+ ```
126
+
127
+ Use `localdeck mcp --project <id>` to restrict access to one remembered project. See [MCP setup and tools](https://github.com/AdstraliaDev1/local-deck/blob/main/docs/mcp.md).
128
+
129
+ ## Troubleshooting
130
+
131
+ - **Port already in use:** check `localdeck ps` and the service logs. LocalDeck does not terminate unrelated processes. For a strict-port development server, use its assigned `PORT` or configure the correct `upstream`.
132
+ - **Sharing fails:** check `cloudflared --version`, network connectivity, and the sharing error. A local app can work while Cloudflare DNS is unavailable.
133
+ - **Changes or upgrades do not take effect:** the daemon keeps the code it loaded at startup. Restart it, then start your services again:
134
+
135
+ ```sh
136
+ localdeck daemon stop
137
+ localdeck daemon start
138
+ ```
139
+
140
+ Stopping the daemon ends its running services and shares.
141
+
142
+ ## Documentation
143
+
144
+ - [Configuration](https://github.com/AdstraliaDev1/local-deck/blob/main/docs/configuration.md)
145
+ - [CLI reference](https://github.com/AdstraliaDev1/local-deck/blob/main/docs/commands.md)
146
+ - [Dashboard and platform support](https://github.com/AdstraliaDev1/local-deck/blob/main/docs/dashboard.md)
147
+ - [MCP integration](https://github.com/AdstraliaDev1/local-deck/blob/main/docs/mcp.md)
148
+ - [Development](https://github.com/AdstraliaDev1/local-deck/blob/main/docs/development.md) and [architecture](https://github.com/AdstraliaDev1/local-deck/blob/main/docs/architecture.md)
149
+ - [Changelog](https://github.com/AdstraliaDev1/local-deck/blob/main/CHANGELOG.md) and [release instructions](https://github.com/AdstraliaDev1/local-deck/blob/main/docs/releasing.md)
150
+
151
+ ## License
152
+
153
+ Free for personal and commercial use, including building and selling your own products. You may not sell LocalDeck, charge for access to it, or claim it as your own product. Modification and redistribution require permission under the [custom proprietary license](https://github.com/AdstraliaDev1/local-deck/blob/main/LICENSE). Bundled dependencies retain their own licenses; the package includes `THIRD_PARTY_NOTICES.md`.