This plugin integrates Amazon Q Developer with Neovim, providing Chat functionality, Inline Code Suggestions, and other Amazon Q capabilities. After installation, authenticate through IAM Identity Center or AWS Builder ID. You can use Amazon Q for free without an AWS account by authenticating with Builder ID.
- NodeJS >=18
- Neovim >=0.10.4
- Install the plugin using your preferred method (see Installation Options)
- Configure the plugin in your Neovim config:
require('amazonq').setup({ ssoStartUrl = 'https://view.awsapps.com/start', -- Authenticate with Amazon Q Free Tier })
- Run
:AmazonQfrom any file to start using the plugin
To install and use the plugin, you only need to clone this repo and add in to Neovim runtimepath location:
-- Add the plugin to Neovim's runtimepath
vim.cmd[[set runtimepath+=/path/to/amazonq.nvim]]
-- Configure the plugin
require('amazonq').setup({
ssoStartUrl = 'https://view.awsapps.com/start', -- Authenticate with Amazon Q Free Tier
})- See Configuration to configure other settings.
- By default the plugin will look for
nodeon your $PATH. To set an explicit location, setcmd.
- By default the plugin will look for
- Run
:AmazonQfrom any file. - Optional: Code completions are provided by the "textDocument/completion" LSP method, which "just works" with most autocompletion plugins.
- Note: completion is limited to supported filetypes.
- See Inline Code Suggestions.
local Plug = vim.fn['plug#']
vim.call('plug#begin')
Plug '[email protected]:awslabs/amazonq.nvim.git'
vim.call('plug#end')
require('amazonq').setup({
ssoStartUrl = 'https://view.awsapps.com/start', -- Authenticate with Amazon Q Free Tier
})-- plugins.lua
return {
{
name = 'amazonq',
url = 'https://github.com/awslabs/amazonq.nvim.git',
opts = {
ssoStartUrl = 'https://view.awsapps.com/start', -- Authenticate with Amazon Q Free Tier
},
},
}You can authenticate using one of two methods:
- Amazon Q Free Tier: Use AWS Builder ID with the URL
https://view.awsapps.com/start - Amazon Q Developer Pro: Use the start URL provided by your administrator
Configure authentication by setting the ssoStartUrl value in your setup:
require('amazonq').setup({
ssoStartUrl = 'https://view.awsapps.com/start', -- For Free Tier with AWS Builder ID
-- OR
-- ssoStartUrl = 'your-organization-sso-url', -- For Pro subscription
})The plugin provides a single global :AmazonQ command and zq mapping:
| Command/Mapping | Description |
|---|---|
:AmazonQ |
Open Amazon Q chat window |
zq |
Select text, then type zq to append it to the chat context. Equivalent to: select text, type :AmazonQ, then run the command. |
:AmazonQ refactor |
Select code, then run this to get refactoring suggestions |
:.AmazonQ fix |
Fix only the current line (the standard "." range means "current line") |
:%AmazonQ optimize |
Optimize the entire contents of the current file |
:AmazonQ explain |
Explain the current file |
For complete documentation, see :help amazonq-usage and :help amazonq-chat.
Below are the available configuration options with their default values. Only ssoStartUrl is required. See :help amazonq-config
for details.
require('amazonq').setup({
-- REQUIRED: SSO portal URL for authentication
ssoStartUrl = 'https://view.awsapps.com/start',
-- OR
-- ssoStartUrl = 'your-organization-sso-url', -- For Pro subscription
-- Command to start Amazon Q Language Server
-- Defaults to the language server bundled with this plugin
cmd = { 'node', 'language-server/build/aws-lsp-codewhisperer-token-binary.js', '--stdio' },
-- Filetypes where the Q will be activated
-- See: https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/q-language-ide-support.html
-- `amazonq` is required for Q Chat feature.
filetypes = {
'amazonq', 'bash', 'java', 'python', 'typescript', 'javascript', 'csharp',
'ruby', 'kotlin', 'sh', 'sql', 'c', 'cpp', 'go', 'rust', 'lua',
},
-- Enable/disable inline code suggestions
inline_suggest = true,
-- Configure the chat panel position and appearance
on_chat_open = function()
vim.cmd[[
vertical topleft split
set wrap breakindent nonumber norelativenumber nolist
]]
end,
-- Enable debug mode for development
debug = false,
})Amazon Q provides AI-powered code suggestions as you type. These are implemented through the LSP textDocument/completion method and work with most Neovim completion plugins (nvim-cmp, blink, mini.completion, etc.).
To use inline suggestions:
- Authenticate with
:AmazonQ login - Start typing in a supported filetype
- Trigger completion using your completion plugin's keybinding
Inline suggestions are enabled by default. To disable them:
require('amazonq').setup({
-- Other settings...
inline_suggest = false,
})For plugin-specific configuration, see :help amazonq-config-completion.
To verify the language server is running:
:checkhealth vim.lspThis shows if the server is attached to the current file and displays the path to the log file (e.g. /local/home/$user/.local/state/nvim/lsp.log).
To see detailed communication between the plugin and Language Server:
vim.lsp.set_log_level('debug')- If the plugin isn't working, ensure NodeJS >=18 is installed and in your PATH
- For authentication issues, verify your
ssoStartUrlis correct - For filetype-specific problems, check that the filetype is in your
filetypesconfiguration
To develop this plugin, you probably want to add it to the Nvim 'runtimepath' so that you can test your changes easily. In that case, remove it from your plugin manager config.
-
Clone amazonq.nvim package locally:
git clone [email protected]:awslabs/amazonq.nvim.git -
Remove amazonq.nvim from your plugin manager config, if necessary.
-
Add the amazonq.nvim package to the Nvim
'runtimepath'. This tells Nvim to look for plugins at that path.vim.cmd[[set runtimepath+=/path/to/amazonq.nvim]]
-
You can now use the
amazonqplugin located in the amazonq.nvim package path. You can make edits, restart Nvim to test them, open Pull Requests, etc.require('amazonq').setup({ ssoStartUrl = 'https://view.awsapps.com/start', debug = true, -- Enable debug mode during development })
See develop.md for more implementation details of plugin and language server.
- To debug the LSP server, see https://github.com/aws/language-servers/blob/main/CONTRIBUTING.md#with-other-clients
- To enable logging, pass
debug=truetorequire('amazonq').setup{}. - Logs are written to
vim.fs.joinpath(vim.fn.stdpath('log'), 'amazonq.log') - Nvim also produces its own
vim.lsplogs by default.- Enable DEBUG log-level for Nvim lsp (hint: put this in a workspace-local
.nvim.luafile and enable the:help 'exrc'option):vim.lsp.set_log_level('debug') - File:
:lua =vim.lsp.log.get_filename() - Logs produced by Amazon Q Language server will appear there as
"window/logMessage"messages:"window/logMessage", … "Runtime: Initializing runtime without encryption", type = 3 } } "window/logMessage", … "Runtime: Registering IAM credentials update handler", type = 3 } } "window/logMessage", … "Runtime: Registering bearer credentials update handler", type = 3 } } ... "window/logMessage", … "Q Chat server has been initialized", type = 3 } } "window/logMessage", … "SSO Auth capability has been initialised", type = 3 } } "window/logMessage", … "Auth Device command called", type = 3 } } "window/logMessage", … 'Resolved SSO token {"accessToken":"…","expiresAt":"2025-01-21T21:44:20.631Z",…}',…} } "window/logMessage", … "Received chat prompt", type = 3 } } "window/logMessage", … "Request for conversation id: New conversation", type = 3 } }
- Enable DEBUG log-level for Nvim lsp (hint: put this in a workspace-local
Code is formatted using stylua and linted using selene. Currently it's not automated, you must run it manually:
- Install the required tools:
- stylua:
- macOS:
brew install stylua - win/linux: https://github.com/JohnnyMorganz/StyLua/releases
- macOS:
- selene:
- macOS:
brew install selene - win/linux: https://github.com/Kampfkarren/selene/releases
- macOS:
- stylua:
- Run (from the top level directory):
-
To check files both selene and stylua in check mode:
make lint
-
To format files with stylua:
make format
-
- Inline suggestions are provided by creating a in-process LSP shim client is named
amazonq-completion.- This is a temporary measure until Q LSP provides this out of the box.
- Vim has a known limitation where it replaces newlines
\nin multiline completions with NUL bytes, which it renders as^@. amazonq.nvim works around this by replacing the NUL bytes in aCompleteDoneevent-handler.
The Neovim plugin for Amazon Q Developer is in experimental state. We welcome contributions and feedback! See Contributing Guide for details on contributing feedback, feature requests, and bug reports.
See CONTRIBUTING for more information.
This project is licensed under the Apache-2.0 License.