MCPcopy Index your code
hub / github.com/EsperoTech/yaade

github.com/EsperoTech/yaade @main sqlite

repository ↗ · DeepWiki ↗
1,957 symbols 5,008 edges 200 files 347 documented · 18%
README
<img style="width:128px;min-width:128px;max-width:128px;height:auto" src="https://github.com/EsperoTech/yaade/raw/main/assets/YaadeIcon.png" alt="yaade-icon"/>

Yaade - Yet Another API Development Environment

Yaade is an open-source, self-hosted, collaborative API development environment.

dark-mode-screenshot

📚 Documentation

Visit docs.yaade.io.

🤔 Why did you develop Yaade?

I was looking for a self-hosted Postman alternative so that API collections can easily be shared between teammates. Even though popular solutions like Hoppscotch exist, their self-hosted app does not come with authentication and relies on Firebase for persistency. Yaade is developed from the ground up with self-hosting and security in mind. That means sensitive information in API requests can safely be stored on your own server!

🌟 Features

  1. Self-hosted: data never leaves your own server
  2. Multi-user: manage users and their permissions
  3. Persistent: even across container or server restarts
  4. Easy single-file data import / export
  5. Proxy requests through your browser or through the server
  6. REST and Websockets with Markdown documentation support
  7. Scripts: Run scripts as cron jobs or via the API. Execute requests or run tests all in pure JavaScript
  8. Import collections from OpenAPI or Postman. Export to all different languages and frameworks.
  9. Most importantly: dark mode default

⚡ Install

To have the best experience with Yaade run the docker container on your server and install the browser extension on your local machine.

1. 🐋 Docker

docker volume create yaade
docker run -d --restart=always -p 9339:9339 -e YAADE_ADMIN_USERNAME=admin -v yaade:/app/data --name yaade esperotech/yaade:latest

The default password is password. After login go to ⚙️ > Account and change the password.

2. 🔧 Extension

Yaade uses a browser extension as a proxy to enable CORS requests. Install the extension using your browsers extension store. Currently only a chrome extension is available. You can find it here (Chrome) and here (Firefox). Then open it and input your server URL, eg. https://yaade.example.com/. From that point all requests originating from your Yaade browser tabs will be proxied through the extension.

⬆️ Upgrade

To upgrade the docker container with a new version, first stop the running container, pull the latest version and start a new container with the old volume.

docker rm -f yaade
docker pull esperotech/yaade:latest
docker run -d --restart=always -p 9339:9339 -e YAADE_ADMIN_USERNAME=admin -v yaade:/app/data --name yaade esperotech/yaade:latest

💾 Technology

  1. SPA built with TypeScript, React and Vite.
  2. Backend built with Kotlin.
  3. H2 file-based database.
  4. Browser extension with plain JavaScript.

🖥️ Local development

  1. Install the required dependencies
    • Java 11
    • Kotlin
    • Node >= 16
  2. Clone the repository
  3. Install the project specific dependencies
cd scripts/
chmod +x install.sh
./install.sh
  1. Start the server on port 9339 using your IDE of choice (I use IntelliJ IDEA)
    • you can also run it by using the jar file directly $ java -jar server/build/libs/yaade-server-1.0-SNAPSHOT
    • note that you must set the environment variable YAADE_ADMIN_USERNAME to run
  2. Start the vite dev server on port 9338
cd client/
npm run dev
  1. Start the dev-proxy on port 9337
cd dev-proxy/
node index.js
  1. Now open your browser and visit http://localhost:9337

🔨 Build

cd scripts/
chmod +x build.sh
./build.sh

Screenshots

🌙 Dark mode

dark-mode-screenshot

☀️ Light mode

light-mode-screenshot

More Screenshots

<img style="width:48%;min-width:48%;max-width:48%;height:auto;margin-bottom:20px" src="https://github.com/EsperoTech/yaade/raw/main/assets/documentation.png" alt="documentation-screenshot"/>
<img style="width:48%;min-width:48%;max-width:48%;height:auto;margin-bottom:20px" src="https://github.com/EsperoTech/yaade/raw/main/assets/environments.png" alt="environments-screenshot"/>
<img style="width:48%;min-width:48%;max-width:48%;height:auto" src="https://github.com/EsperoTech/yaade/raw/main/assets/scripts.png" alt="scripts-screenshot"/>
<img style="width:48%;min-width:48%;max-width:48%;height:auto" src="https://github.com/EsperoTech/yaade/raw/main/assets/user-management.png" alt="user-management-screenshot"/>

🤝 How can I contribute?

Your contribution is very welcome! First open an issue about the topic you want to contribute on, eg. adding a new feature, bugfixing or refactoring. We will then discuss further details. Eventually, I will review your Pull Request and merge / release it.

Extension points exported contracts — how you extend this code

CollectionPanelProps (Interface)
(no doc)
client/src/components/collectionPanel/CollectionPanel.tsx
Provider (Interface)
(no doc)
client/src/components/settings/userSettings/UserSettings.tsx
AuthConfig (Interface)
(no doc)
client/src/components/settings/userSettings/UserSettings.tsx
Provider (Interface)
(no doc)
client/src/components/settings/userSettings/providerTabs/ExternalProviderTab.tsx
AuthConfig (Interface)
(no doc)
client/src/components/settings/userSettings/providerTabs/ExternalProviderTab.tsx

Core symbols most depended-on inside this repo

i
called by 523
server/src/main/resources/bundle.js
r
called by 504
server/src/main/resources/bundle.js
clone
called by 374
server/src/main/resources/bundle.js
n
called by 160
server/src/main/resources/bundle.js
toString
called by 104
server/src/main/resources/bundle.js
add
called by 99
server/src/main/java/com/postman/collection/PropertyList.java
a
called by 94
server/src/main/resources/bundle.js
c
called by 90
server/src/main/resources/bundle.js

Shape

Function 947
Method 825
Class 125
Interface 49
Enum 11

Languages

TypeScript82%
Java18%

Modules by API surface

server/src/main/resources/bundle.js589 symbols
client/src/utils/jasmine/jasmine.js295 symbols
server/src/main/resources/jasmine.js294 symbols
server/src/main/java/com/postman/collection/BodyElement.java36 symbols
server/src/main/java/com/postman/collection/Url.java34 symbols
server/src/main/java/com/postman/collection/Collection.java33 symbols
client/src/state/collections.tsx28 symbols
server/src/main/java/org/openapitools/codegen/examples/ModelUtils.java27 symbols
server/src/main/java/com/postman/collection/Event.java25 symbols
server/src/main/java/com/postman/collection/Cookie.java25 symbols
client/src/api/index.tsx25 symbols
client/src/components/collectionPanel/EnvironmentsTab/EnvironmentsTab.tsx21 symbols

Dependencies from manifests, versioned

@chakra-ui/icons1.1.7 · 1×
@chakra-ui/react1.8.6 · 1×
@codemirror/lang-html6.4.2 · 1×
@codemirror/lang-javascript6.1.4 · 1×
@codemirror/lang-markdown6.1.1 · 1×
@codemirror/lang-xml6.0.2 · 1×
@codemirror/language-data6.5.1 · 1×
@emotion/react11.8.1 · 1×
@emotion/styled11.8.1 · 1×
@hookstate/core4.0.0-rc11 · 1×
@modelcontextprotocol/sdk1.8.0 · 1×

For agents

$ claude mcp add yaade \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact