@neocode-ai/web 1.1.1

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.
Files changed (86) hide show
  1. package/README.md +54 -0
  2. package/astro.config.mjs +145 -0
  3. package/config.mjs +14 -0
  4. package/package.json +41 -0
  5. package/public/robots.txt +6 -0
  6. package/public/theme.json +183 -0
  7. package/src/assets/lander/check.svg +2 -0
  8. package/src/assets/lander/copy.svg +2 -0
  9. package/src/assets/lander/screenshot-github.png +0 -0
  10. package/src/assets/lander/screenshot-splash.png +0 -0
  11. package/src/assets/lander/screenshot-vscode.png +0 -0
  12. package/src/assets/lander/screenshot.png +0 -0
  13. package/src/assets/logo-dark.svg +20 -0
  14. package/src/assets/logo-light.svg +20 -0
  15. package/src/assets/logo-ornate-dark.svg +18 -0
  16. package/src/assets/logo-ornate-light.svg +18 -0
  17. package/src/assets/web/web-homepage-active-session.png +0 -0
  18. package/src/assets/web/web-homepage-new-session.png +0 -0
  19. package/src/assets/web/web-homepage-see-servers.png +0 -0
  20. package/src/components/Head.astro +50 -0
  21. package/src/components/Header.astro +128 -0
  22. package/src/components/Hero.astro +11 -0
  23. package/src/components/Lander.astro +713 -0
  24. package/src/components/Share.tsx +634 -0
  25. package/src/components/SiteTitle.astro +59 -0
  26. package/src/components/icons/custom.tsx +87 -0
  27. package/src/components/icons/index.tsx +4454 -0
  28. package/src/components/share/common.tsx +77 -0
  29. package/src/components/share/content-bash.module.css +85 -0
  30. package/src/components/share/content-bash.tsx +67 -0
  31. package/src/components/share/content-code.module.css +26 -0
  32. package/src/components/share/content-code.tsx +32 -0
  33. package/src/components/share/content-diff.module.css +153 -0
  34. package/src/components/share/content-diff.tsx +231 -0
  35. package/src/components/share/content-error.module.css +64 -0
  36. package/src/components/share/content-error.tsx +24 -0
  37. package/src/components/share/content-markdown.module.css +154 -0
  38. package/src/components/share/content-markdown.tsx +75 -0
  39. package/src/components/share/content-text.module.css +63 -0
  40. package/src/components/share/content-text.tsx +37 -0
  41. package/src/components/share/copy-button.module.css +30 -0
  42. package/src/components/share/copy-button.tsx +28 -0
  43. package/src/components/share/part.module.css +428 -0
  44. package/src/components/share/part.tsx +780 -0
  45. package/src/components/share.module.css +832 -0
  46. package/src/content/docs/1-0.mdx +67 -0
  47. package/src/content/docs/acp.mdx +156 -0
  48. package/src/content/docs/agents.mdx +720 -0
  49. package/src/content/docs/cli.mdx +597 -0
  50. package/src/content/docs/commands.mdx +323 -0
  51. package/src/content/docs/config.mdx +683 -0
  52. package/src/content/docs/custom-tools.mdx +170 -0
  53. package/src/content/docs/ecosystem.mdx +76 -0
  54. package/src/content/docs/enterprise.mdx +170 -0
  55. package/src/content/docs/formatters.mdx +130 -0
  56. package/src/content/docs/github.mdx +321 -0
  57. package/src/content/docs/gitlab.mdx +195 -0
  58. package/src/content/docs/ide.mdx +48 -0
  59. package/src/content/docs/index.mdx +359 -0
  60. package/src/content/docs/keybinds.mdx +191 -0
  61. package/src/content/docs/lsp.mdx +188 -0
  62. package/src/content/docs/mcp-servers.mdx +511 -0
  63. package/src/content/docs/models.mdx +223 -0
  64. package/src/content/docs/modes.mdx +331 -0
  65. package/src/content/docs/network.mdx +57 -0
  66. package/src/content/docs/permissions.mdx +237 -0
  67. package/src/content/docs/plugins.mdx +362 -0
  68. package/src/content/docs/providers.mdx +1889 -0
  69. package/src/content/docs/rules.mdx +180 -0
  70. package/src/content/docs/sdk.mdx +391 -0
  71. package/src/content/docs/server.mdx +286 -0
  72. package/src/content/docs/share.mdx +128 -0
  73. package/src/content/docs/skills.mdx +220 -0
  74. package/src/content/docs/themes.mdx +369 -0
  75. package/src/content/docs/tools.mdx +345 -0
  76. package/src/content/docs/troubleshooting.mdx +300 -0
  77. package/src/content/docs/tui.mdx +390 -0
  78. package/src/content/docs/web.mdx +136 -0
  79. package/src/content/docs/windows-wsl.mdx +113 -0
  80. package/src/content/docs/zen.mdx +251 -0
  81. package/src/content.config.ts +7 -0
  82. package/src/pages/[...slug].md.ts +18 -0
  83. package/src/pages/s/[id].astro +113 -0
  84. package/src/styles/custom.css +405 -0
  85. package/src/types/lang-map.d.ts +27 -0
  86. package/tsconfig.json +9 -0
@@ -0,0 +1,170 @@
1
+ ---
2
+ title: Custom Tools
3
+ description: Create tools the LLM can call in neocode.
4
+ ---
5
+
6
+ Custom tools are functions you create that the LLM can call during conversations. They work alongside neocode's [built-in tools](/docs/tools) like `read`, `write`, and `bash`.
7
+
8
+ ---
9
+
10
+ ## Creating a tool
11
+
12
+ Tools are defined as **TypeScript** or **JavaScript** files. However, the tool definition can invoke scripts written in **any language** — TypeScript or JavaScript is only used for the tool definition itself.
13
+
14
+ ---
15
+
16
+ ### Location
17
+
18
+ They can be defined:
19
+
20
+ - Locally by placing them in the `.neocode/tools/` directory of your project.
21
+ - Or globally, by placing them in `~/.config/neocode/tools/`.
22
+
23
+ ---
24
+
25
+ ### Structure
26
+
27
+ The easiest way to create tools is using the `tool()` helper which provides type-safety and validation.
28
+
29
+ ```ts title=".neocode/tools/database.ts" {1}
30
+ import { tool } from "@neocode-ai/plugin"
31
+
32
+ export default tool({
33
+ description: "Query the project database",
34
+ args: {
35
+ query: tool.schema.string().describe("SQL query to execute"),
36
+ },
37
+ async execute(args) {
38
+ // Your database logic here
39
+ return `Executed query: ${args.query}`
40
+ },
41
+ })
42
+ ```
43
+
44
+ The **filename** becomes the **tool name**. The above creates a `database` tool.
45
+
46
+ ---
47
+
48
+ #### Multiple tools per file
49
+
50
+ You can also export multiple tools from a single file. Each export becomes **a separate tool** with the name **`<filename>_<exportname>`**:
51
+
52
+ ```ts title=".neocode/tools/math.ts"
53
+ import { tool } from "@neocode-ai/plugin"
54
+
55
+ export const add = tool({
56
+ description: "Add two numbers",
57
+ args: {
58
+ a: tool.schema.number().describe("First number"),
59
+ b: tool.schema.number().describe("Second number"),
60
+ },
61
+ async execute(args) {
62
+ return args.a + args.b
63
+ },
64
+ })
65
+
66
+ export const multiply = tool({
67
+ description: "Multiply two numbers",
68
+ args: {
69
+ a: tool.schema.number().describe("First number"),
70
+ b: tool.schema.number().describe("Second number"),
71
+ },
72
+ async execute(args) {
73
+ return args.a * args.b
74
+ },
75
+ })
76
+ ```
77
+
78
+ This creates two tools: `math_add` and `math_multiply`.
79
+
80
+ ---
81
+
82
+ ### Arguments
83
+
84
+ You can use `tool.schema`, which is just [Zod](https://zod.dev), to define argument types.
85
+
86
+ ```ts "tool.schema"
87
+ args: {
88
+ query: tool.schema.string().describe("SQL query to execute")
89
+ }
90
+ ```
91
+
92
+ You can also import [Zod](https://zod.dev) directly and return a plain object:
93
+
94
+ ```ts {6}
95
+ import { z } from "zod"
96
+
97
+ export default {
98
+ description: "Tool description",
99
+ args: {
100
+ param: z.string().describe("Parameter description"),
101
+ },
102
+ async execute(args, context) {
103
+ // Tool implementation
104
+ return "result"
105
+ },
106
+ }
107
+ ```
108
+
109
+ ---
110
+
111
+ ### Context
112
+
113
+ Tools receive context about the current session:
114
+
115
+ ```ts title=".neocode/tools/project.ts" {8}
116
+ import { tool } from "@neocode-ai/plugin"
117
+
118
+ export default tool({
119
+ description: "Get project information",
120
+ args: {},
121
+ async execute(args, context) {
122
+ // Access context information
123
+ const { agent, sessionID, messageID, directory, worktree } = context
124
+ return `Agent: ${agent}, Session: ${sessionID}, Message: ${messageID}, Directory: ${directory}, Worktree: ${worktree}`
125
+ },
126
+ })
127
+ ```
128
+
129
+ Use `context.directory` for the session working directory.
130
+ Use `context.worktree` for the git worktree root.
131
+
132
+ ---
133
+
134
+ ## Examples
135
+
136
+ ### Write a tool in Python
137
+
138
+ You can write your tools in any language you want. Here's an example that adds two numbers using Python.
139
+
140
+ First, create the tool as a Python script:
141
+
142
+ ```python title=".neocode/tools/add.py"
143
+ import sys
144
+
145
+ a = int(sys.argv[1])
146
+ b = int(sys.argv[2])
147
+ print(a + b)
148
+ ```
149
+
150
+ Then create the tool definition that invokes it:
151
+
152
+ ```ts title=".neocode/tools/python-add.ts" {10}
153
+ import { tool } from "@neocode-ai/plugin"
154
+ import path from "path"
155
+
156
+ export default tool({
157
+ description: "Add two numbers using Python",
158
+ args: {
159
+ a: tool.schema.number().describe("First number"),
160
+ b: tool.schema.number().describe("Second number"),
161
+ },
162
+ async execute(args, context) {
163
+ const script = path.join(context.worktree, ".neocode/tools/add.py")
164
+ const result = await Bun.$`python3 ${script} ${args.a} ${args.b}`.text()
165
+ return result.trim()
166
+ },
167
+ })
168
+ ```
169
+
170
+ Here we are using the [`Bun.$`](https://bun.com/docs/runtime/shell) utility to run the Python script.
@@ -0,0 +1,76 @@
1
+ ---
2
+ title: Ecosystem
3
+ description: Projects and integrations built with NeoCode.
4
+ ---
5
+
6
+ A collection of community projects built on NeoCode.
7
+
8
+ :::note
9
+ Want to add your NeoCode related project to this list? Submit a PR.
10
+ :::
11
+
12
+ You can also check out [awesome-neocode](https://github.com/awesome-neocode/awesome-neocode) and [neocode.cafe](https://neocode.cafe), a community that aggregates the ecosystem and community.
13
+
14
+ ---
15
+
16
+ ## Plugins
17
+
18
+ | Name | Description |
19
+ | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
20
+ | [neocode-daytona](https://github.com/jamesmurdza/daytona/blob/main/guides/typescript/neocode/README.md) | Automatically run NeoCode sessions in isolated Daytona sandboxes with git sync and live previews |
21
+ | [neocode-helicone-session](https://github.com/H2Shami/neocode-helicone-session) | Automatically inject Helicone session headers for request grouping |
22
+ | [neocode-type-inject](https://github.com/nick-vi/neocode-type-inject) | Auto-inject TypeScript/Svelte types into file reads with lookup tools |
23
+ | [neocode-openai-codex-auth](https://github.com/numman-ali/neocode-openai-codex-auth) | Use your ChatGPT Plus/Pro subscription instead of API credits |
24
+ | [neocode-gemini-auth](https://github.com/jenslys/neocode-gemini-auth) | Use your existing Gemini plan instead of API billing |
25
+ | [neocode-antigravity-auth](https://github.com/NoeFabris/neocode-antigravity-auth) | Use Antigravity's free models instead of API billing |
26
+ | [neocode-devcontainers](https://github.com/athal7/neocode-devcontainers) | Multi-branch devcontainer isolation with shallow clones and auto-assigned ports |
27
+ | [neocode-google-antigravity-auth](https://github.com/shekohex/neocode-google-antigravity-auth) | Google Antigravity OAuth Plugin, with support for Google Search, and more robust API handling |
28
+ | [neocode-dynamic-context-pruning](https://github.com/Tarquinen/neocode-dynamic-context-pruning) | Optimize token usage by pruning obsolete tool outputs |
29
+ | [neocode-websearch-cited](https://github.com/ghoulr/neocode-websearch-cited.git) | Add native websearch support for supported providers with Google grounded style |
30
+ | [neocode-pty](https://github.com/shekohex/neocode-pty.git) | Enables AI agents to run background processes in a PTY, send interactive input to them. |
31
+ | [neocode-shell-strategy](https://github.com/JRedeker/neocode-shell-strategy) | Instructions for non-interactive shell commands - prevents hangs from TTY-dependent operations |
32
+ | [neocode-wakatime](https://github.com/angristan/neocode-wakatime) | Track NeoCode usage with Wakatime |
33
+ | [neocode-md-table-formatter](https://github.com/franlol/neocode-md-table-formatter/tree/main) | Clean up markdown tables produced by LLMs |
34
+ | [neocode-morph-fast-apply](https://github.com/JRedeker/neocode-morph-fast-apply) | 10x faster code editing with Morph Fast Apply API and lazy edit markers |
35
+ | [oh-my-neocode](https://github.com/code-yeongyu/oh-my-neocode) | Background agents, pre-built LSP/AST/MCP tools, curated agents, Claude Code compatible |
36
+ | [neocode-notificator](https://github.com/panta82/neocode-notificator) | Desktop notifications and sound alerts for NeoCode sessions |
37
+ | [neocode-notifier](https://github.com/mohak34/neocode-notifier) | Desktop notifications and sound alerts for permission, completion, and error events |
38
+ | [neocode-zellij-namer](https://github.com/24601/neocode-zellij-namer) | AI-powered automatic Zellij session naming based on NeoCode context |
39
+ | [neocode-skillful](https://github.com/zenobi-us/neocode-skillful) | Allow NeoCode agents to lazy load prompts on demand with skill discovery and injection |
40
+ | [neocode-supermemory](https://github.com/supermemoryai/neocode-supermemory) | Persistent memory across sessions using Supermemory |
41
+ | [@plannotator/neocode](https://github.com/backnotprop/plannotator/tree/main/apps/neocode-plugin) | Interactive plan review with visual annotation and private/offline sharing |
42
+ | [@openspoon/subtask2](https://github.com/spoons-and-mirrors/subtask2) | Extend neocode /commands into a powerful orchestration system with granular flow control |
43
+ | [neocode-scheduler](https://github.com/different-ai/neocode-scheduler) | Schedule recurring jobs using launchd (Mac) or systemd (Linux) with cron syntax |
44
+ | [micode](https://github.com/vtemian/micode) | Structured Brainstorm → Plan → Implement workflow with session continuity |
45
+ | [octto](https://github.com/vtemian/octto) | Interactive browser UI for AI brainstorming with multi-question forms |
46
+ | [neocode-background-agents](https://github.com/kdcokenny/neocode-background-agents) | Claude Code-style background agents with async delegation and context persistence |
47
+ | [neocode-notify](https://github.com/kdcokenny/neocode-notify) | Native OS notifications for NeoCode – know when tasks complete |
48
+ | [neocode-workspace](https://github.com/kdcokenny/neocode-workspace) | Bundled multi-agent orchestration harness – 16 components, one install |
49
+ | [neocode-worktree](https://github.com/kdcokenny/neocode-worktree) | Zero-friction git worktrees for NeoCode |
50
+
51
+ ---
52
+
53
+ ## Projects
54
+
55
+ | Name | Description |
56
+ | ---------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
57
+ | [kimaki](https://github.com/remorses/kimaki) | Discord bot to control NeoCode sessions, built on the SDK |
58
+ | [neocode.nvim](https://github.com/NickvanDyke/neocode.nvim) | Neovim plugin for editor-aware prompts, built on the API |
59
+ | [portal](https://github.com/hosenur/portal) | Mobile-first web UI for NeoCode over Tailscale/VPN |
60
+ | [neocode plugin template](https://github.com/zenobi-us/neocode-plugin-template/) | Template for building NeoCode plugins |
61
+ | [neocode.nvim](https://github.com/sudo-tee/neocode.nvim) | Neovim frontend for neocode - a terminal-based AI coding agent |
62
+ | [ai-sdk-provider-neocode-sdk](https://github.com/ben-vargas/ai-sdk-provider-neocode-sdk) | Vercel AI SDK provider for using NeoCode via @neocode-ai/sdk |
63
+ | [OpenChamber](https://github.com/btriapitsyn/openchamber) | Web / Desktop App and VS Code Extension for NeoCode |
64
+ | [NeoCode-Obsidian](https://github.com/mtymek/neocode-obsidian) | Obsidian plugin that embedds NeoCode in Obsidian's UI |
65
+ | [OpenWork](https://github.com/different-ai/openwork) | An open-source alternative to Claude Cowork, powered by NeoCode |
66
+ | [ocx](https://github.com/kdcokenny/ocx) | NeoCode extension manager with portable, isolated profiles. |
67
+ | [CodeNomad](https://github.com/NeuralNomadsAI/CodeNomad) | Desktop, Web, Mobile and Remote Client App for NeoCode |
68
+
69
+ ---
70
+
71
+ ## Agents
72
+
73
+ | Name | Description |
74
+ | --------------------------------------------------------------- | ------------------------------------------------------------ |
75
+ | [Agentic](https://github.com/Cluster444/agentic) | Modular AI agents and commands for structured development |
76
+ | [neocode-agents](https://github.com/darrenhinde/neocode-agents) | Configs, prompts, agents, and plugins for enhanced workflows |
@@ -0,0 +1,170 @@
1
+ ---
2
+ title: Enterprise
3
+ description: Using NeoCode securely in your organization.
4
+ ---
5
+
6
+ import config from "../../../config.mjs"
7
+ export const email = `mailto:${config.email}`
8
+
9
+ NeoCode Enterprise is for organizations that want to ensure that their code and data never leaves their infrastructure. It can do this by using a centralized config that integrates with your SSO and internal AI gateway.
10
+
11
+ :::note
12
+ NeoCode does not store any of your code or context data.
13
+ :::
14
+
15
+ To get started with NeoCode Enterprise:
16
+
17
+ 1. Do a trial internally with your team.
18
+ 2. **<a href={email}>Contact us</a>** to discuss pricing and implementation options.
19
+
20
+ ---
21
+
22
+ ## Trial
23
+
24
+ NeoCode is open source and does not store any of your code or context data, so your developers can simply [get started](/docs/) and carry out a trial.
25
+
26
+ ---
27
+
28
+ ### Data handling
29
+
30
+ **NeoCode does not store your code or context data.** All processing happens locally or through direct API calls to your AI provider.
31
+
32
+ This means that as long as you are using a provider you trust, or an internal
33
+ AI gateway, you can use NeoCode securely.
34
+
35
+ The only caveat here is the optional `/share` feature.
36
+
37
+ ---
38
+
39
+ #### Sharing conversations
40
+
41
+ If a user enables the `/share` feature, the conversation and the data associated with it are sent to the service we use to host these share pages at neo.khulnasoft.com.
42
+
43
+ The data is currently served through our CDN's edge network, and is cached on the edge near your users.
44
+
45
+ We recommend you disable this for your trial.
46
+
47
+ ```json title="neocode.json"
48
+ {
49
+ "$schema": "https://neo.khulnasoft.com/config.json",
50
+ "share": "disabled"
51
+ }
52
+ ```
53
+
54
+ [Learn more about sharing](/docs/share).
55
+
56
+ ---
57
+
58
+ ### Code ownership
59
+
60
+ **You own all code produced by NeoCode.** There are no licensing restrictions or ownership claims.
61
+
62
+ ---
63
+
64
+ ## Pricing
65
+
66
+ We use a per-seat model for NeoCode Enterprise. If you have your own LLM gateway, we do not charge for tokens used. For further details about pricing and implementation options, **<a href={email}>contact us</a>**.
67
+
68
+ ---
69
+
70
+ ## Deployment
71
+
72
+ Once you have completed your trial and you are ready to use NeoCode at
73
+ your organization, you can **<a href={email}>contact us</a>** to discuss
74
+ pricing and implementation options.
75
+
76
+ ---
77
+
78
+ ### Central Config
79
+
80
+ We can set up NeoCode to use a single central config for your entire organization.
81
+
82
+ This centralized config can integrate with your SSO provider and ensures all users access only your internal AI gateway.
83
+
84
+ ---
85
+
86
+ ### SSO integration
87
+
88
+ Through the central config, NeoCode can integrate with your organization's SSO provider for authentication.
89
+
90
+ This allows NeoCode to obtain credentials for your internal AI gateway through your existing identity management system.
91
+
92
+ ---
93
+
94
+ ### Internal AI gateway
95
+
96
+ With the central config, NeoCode can also be configured to use only your internal AI gateway.
97
+
98
+ You can also disable all other AI providers, ensuring all requests go through your organization's approved infrastructure.
99
+
100
+ ---
101
+
102
+ ### Self-hosting
103
+
104
+ While we recommend disabling the share pages to ensure your data never leaves
105
+ your organization, we can also help you self-host them on your infrastructure.
106
+
107
+ This is currently on our roadmap. If you're interested, **<a href={email}>let us know</a>**.
108
+
109
+ ---
110
+
111
+ ## FAQ
112
+
113
+ <details>
114
+ <summary>What is NeoCode Enterprise?</summary>
115
+
116
+ NeoCode Enterprise is for organizations that want to ensure that their code and data never leaves their infrastructure. It can do this by using a centralized config that integrates with your SSO and internal AI gateway.
117
+
118
+ </details>
119
+
120
+ <details>
121
+ <summary>How do I get started with NeoCode Enterprise?</summary>
122
+
123
+ Simply start with an internal trial with your team. NeoCode by default does not store your code or context data, making it easy to get started.
124
+
125
+ Then **<a href={email}>contact us</a>** to discuss pricing and implementation options.
126
+
127
+ </details>
128
+
129
+ <details>
130
+ <summary>How does enterprise pricing work?</summary>
131
+
132
+ We offer per-seat enterprise pricing. If you have your own LLM gateway, we do not charge for tokens used. For further details, **<a href={email}>contact us</a>** for a custom quote based on your organization's needs.
133
+
134
+ </details>
135
+
136
+ <details>
137
+ <summary>Is my data secure with NeoCode Enterprise?</summary>
138
+
139
+ Yes. NeoCode does not store your code or context data. All processing happens locally or through direct API calls to your AI provider. With central config and SSO integration, your data remains secure within your organization's infrastructure.
140
+
141
+ </details>
142
+
143
+ <details>
144
+ <summary>Can we use our own private NPM registry?</summary>
145
+
146
+ NeoCode supports private npm registries through Bun's native `.npmrc` file support. If your organization uses a private registry, such as JFrog Artifactory, Nexus, or similar, ensure developers are authenticated before running NeoCode.
147
+
148
+ To set up authentication with your private registry:
149
+
150
+ ```bash
151
+ npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/
152
+ ```
153
+
154
+ This creates `~/.npmrc` with authentication details. NeoCode will automatically
155
+ pick this up.
156
+
157
+ :::caution
158
+ You must be logged into the private registry before running NeoCode.
159
+ :::
160
+
161
+ Alternatively, you can manually configure a `.npmrc` file:
162
+
163
+ ```bash title="~/.npmrc"
164
+ registry=https://your-company.jfrog.io/api/npm/npm-virtual/
165
+ //your-company.jfrog.io/api/npm/npm-virtual/:_authToken=${NPM_AUTH_TOKEN}
166
+ ```
167
+
168
+ Developers must be logged into the private registry before running NeoCode to ensure packages can be installed from your enterprise registry.
169
+
170
+ </details>
@@ -0,0 +1,130 @@
1
+ ---
2
+ title: Formatters
3
+ description: NeoCode uses language specific formatters.
4
+ ---
5
+
6
+ NeoCode automatically formats files after they are written or edited using language-specific formatters. This ensures that the code that is generated follows the code styles of your project.
7
+
8
+ ---
9
+
10
+ ## Built-in
11
+
12
+ NeoCode comes with several built-in formatters for popular languages and frameworks. Below is a list of the formatters, supported file extensions, and commands or config options it needs.
13
+
14
+ | Formatter | Extensions | Requirements |
15
+ | -------------------- | -------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
16
+ | gofmt | .go | `gofmt` command available |
17
+ | mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | `mix` command available |
18
+ | prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, and [more](https://prettier.io/docs/en/index.html) | `prettier` dependency in `package.json` |
19
+ | biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, and [more](https://biomejs.dev/) | `biome.json(c)` config file |
20
+ | zig | .zig, .zon | `zig` command available |
21
+ | clang-format | .c, .cpp, .h, .hpp, .ino, and [more](https://clang.llvm.org/docs/ClangFormat.html) | `.clang-format` config file |
22
+ | ktlint | .kt, .kts | `ktlint` command available |
23
+ | ruff | .py, .pyi | `ruff` command available with config |
24
+ | rustfmt | .rs | `rustfmt` command available |
25
+ | cargofmt | .rs | `cargo fmt` command available |
26
+ | uv | .py, .pyi | `uv` command available |
27
+ | rubocop | .rb, .rake, .gemspec, .ru | `rubocop` command available |
28
+ | standardrb | .rb, .rake, .gemspec, .ru | `standardrb` command available |
29
+ | htmlbeautifier | .erb, .html.erb | `htmlbeautifier` command available |
30
+ | air | .R | `air` command available |
31
+ | dart | .dart | `dart` command available |
32
+ | ocamlformat | .ml, .mli | `ocamlformat` command available and `.ocamlformat` config file |
33
+ | terraform | .tf, .tfvars | `terraform` command available |
34
+ | gleam | .gleam | `gleam` command available |
35
+ | nixfmt | .nix | `nixfmt` command available |
36
+ | shfmt | .sh, .bash | `shfmt` command available |
37
+ | pint | .php | `laravel/pint` dependency in `composer.json` |
38
+ | oxfmt (Experimental) | .js, .jsx, .ts, .tsx | `oxfmt` dependency in `package.json` and an [experimental env variable flag](/docs/cli/#experimental) |
39
+ | ormolu | .hs | `ormolu` command available |
40
+
41
+ So if your project has `prettier` in your `package.json`, NeoCode will automatically use it.
42
+
43
+ ---
44
+
45
+ ## How it works
46
+
47
+ When NeoCode writes or edits a file, it:
48
+
49
+ 1. Checks the file extension against all enabled formatters.
50
+ 2. Runs the appropriate formatter command on the file.
51
+ 3. Applies the formatting changes automatically.
52
+
53
+ This process happens in the background, ensuring your code styles are maintained without any manual steps.
54
+
55
+ ---
56
+
57
+ ## Configure
58
+
59
+ You can customize formatters through the `formatter` section in your NeoCode config.
60
+
61
+ ```json title="neocode.json"
62
+ {
63
+ "$schema": "https://neo.khulnasoft.com/config.json",
64
+ "formatter": {}
65
+ }
66
+ ```
67
+
68
+ Each formatter configuration supports the following:
69
+
70
+ | Property | Type | Description |
71
+ | ------------- | -------- | ------------------------------------------------------- |
72
+ | `disabled` | boolean | Set this to `true` to disable the formatter |
73
+ | `command` | string[] | The command to run for formatting |
74
+ | `environment` | object | Environment variables to set when running the formatter |
75
+ | `extensions` | string[] | File extensions this formatter should handle |
76
+
77
+ Let's look at some examples.
78
+
79
+ ---
80
+
81
+ ### Disabling formatters
82
+
83
+ To disable **all** formatters globally, set `formatter` to `false`:
84
+
85
+ ```json title="neocode.json" {3}
86
+ {
87
+ "$schema": "https://neo.khulnasoft.com/config.json",
88
+ "formatter": false
89
+ }
90
+ ```
91
+
92
+ To disable a **specific** formatter, set `disabled` to `true`:
93
+
94
+ ```json title="neocode.json" {5}
95
+ {
96
+ "$schema": "https://neo.khulnasoft.com/config.json",
97
+ "formatter": {
98
+ "prettier": {
99
+ "disabled": true
100
+ }
101
+ }
102
+ }
103
+ ```
104
+
105
+ ---
106
+
107
+ ### Custom formatters
108
+
109
+ You can override the built-in formatters or add new ones by specifying the command, environment variables, and file extensions:
110
+
111
+ ```json title="neocode.json" {4-14}
112
+ {
113
+ "$schema": "https://neo.khulnasoft.com/config.json",
114
+ "formatter": {
115
+ "prettier": {
116
+ "command": ["npx", "prettier", "--write", "$FILE"],
117
+ "environment": {
118
+ "NODE_ENV": "development"
119
+ },
120
+ "extensions": [".js", ".ts", ".jsx", ".tsx"]
121
+ },
122
+ "custom-markdown-formatter": {
123
+ "command": ["deno", "fmt", "$FILE"],
124
+ "extensions": [".md"]
125
+ }
126
+ }
127
+ }
128
+ ```
129
+
130
+ The **`$FILE` placeholder** in the command will be replaced with the path to the file being formatted.