Skip to content

feat: add localxpose loclx cli - #534

Open
LocalXpose wants to merge 1 commit into
1Password:mainfrom
LocalXpose:localxpose
Open

LocalXpose wants to merge 1 commit into
1Password:mainfrom
LocalXpose:localxpose

Conversation

@LocalXpose

@LocalXpose LocalXpose commented Aug 6, 2025 •

Copy link
Copy Markdown

Overview

Provides a CLI plugin for the LocalXpose CLI and embedded GUI application. Supports conditional auth and importing from the OS keychain.

Type of change

  • Created a new plugin
  • Improved an existing plugin
  • Fixed a bug in an existing plugin
  • Improved contributor utilities or experience

How To Test

  • Sign up for a free LocalXpose account
  • Install the LocalXpose CLI using your package manager of choice
  • op plugin init loclx
  • loclx account status (will fail if unauthenticated)

Changelog

Authenticate the LocalXpose CLI and GUI apps using Touch ID and other unlock options with 1Password Shell Plugins.

@rr3khan rr3khan closed this Sep 26, 2026
@rr3khan rr3khan reopened this Sep 26, 2026
@LocalXpose
LocalXpose force-pushed the localxpose branch 2 times, most recently from cf16c68 to 3950cca Compare October 6, 2026 16:31
@LocalXpose

Copy link
Copy Markdown
Author

FYI @rr3khan with the GitHub Actions outage yesterday 😭 I had to push this again to trigger the PR checks. Let me know if there's anything I can do to help with this.

@LocalXpose
LocalXpose force-pushed the localxpose branch 2 times, most recently from 40d2f6c to cf16c68 Compare October 7, 2026 01:55
@JillRegan
JillRegan self-requested a review October 8, 2026 14:11

@JillRegan JillRegan left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey, thanks for the contribution here! I just left a few comments. 😄

}
for _, backendType := range availableBackends {
attempt := out.NewAttempt(importer.SourceOther(string(backendType), ""))
openKeyring, err := keyring.Open(keyring.Config{

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this loop might be opening the same keyring on every pass. backendType never gets passed into keyring.Open, so it uses the default backend each time.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, good catch!

Name: "LocalXpose CLI",
Runs: []string{"loclx"},
DocsURL: sdk.URL("https://localxpose.io/docs/cli"),
NeedsAuth: needsauth.IfAll(

@JillRegan JillRegan Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

main now has a NotForCommand helper. It only matches from the start of the command so it would stop things like loclx tunnel http --subdomain update from accidentally skipping auth. Might be worth swapping NotWhenContainsArgs for NotForCommand here!

)}
}

var defaultEnvVarMapping = map[string]sdk.FieldName{

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The LocalXpose CLI docs use ACCESS_TOKEN and say account login falls back to $HOME/.access (not ~/.localxpose/.access). Does loclx also read LX_ACCESS_TOKEN?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants