mirrord lets you easily mirror traffic from your production environment to your development environment.

Overview

mirrord

mirrord lets you easily mirror traffic from your Kubernetes cluster to your development environment. It comes as both Visual Studio Code extension and a CLI tool.

Getting Started

mirrord uses your machine's default kubeconfig for access to the Kubernetes API.


VSCode Extension

Installation

Get the extension here.

How to use

  • Start debugging your project
  • Click "Start mirrord" on the status bar
  • Choose pod to mirror traffic from
  • To stop mirroring, click "Stop mirrord" (or stop debugging)

The extension listens on the remote port 80, and uses the k8s namespace 'default', but both of those are configurable through the settings button. The extension automatically detects which local port your debugged process listens on and directs the mirrored traffic to it. If you prefer to direct traffic to a different local port, edit launch.json:

{ "mirrord": { "port": "" } }


CLI Tool

Installation

npm install -g mirrord

How to use

mirrord

For more options, run:

mirrord --help


How it works

mirrord works by letting you select a pod to mirror traffic from. It launches a privileged pod on the same nodewhich enters the namespace of the selected pod and captures traffic from it.

For more technical information, see TECHNICAL.md

Caveats

  • mirrord currently supports Kubernetes clusters using containerd runtime only. Support for more runtimes will be added if there's demand.

Contributing

Contributions are welcome via PRs.

Help & Community 🎉 ✉️

Join our Discord Server for questions, support and fun.


Icon Credit: flaticon.com

Comments
  • Using asdf as a version manager fails to find a version of NodeJS/NPM

    Using asdf as a version manager fails to find a version of NodeJS/NPM

    Bug Description

    When using asdf as my version manager for a bunch of languages, I cannot mirror any apps into a local k8s cluster.

    I get the same message as if I had forgotten to set a local or global version for node. I'm sure this is somehow related to running in a different context than if I were running locally... I'm just confused. Running the same command without mirrord exec does work.

    Steps to Reproduce

    1. mirrord exec npm run dev --target pod/vs-deployment-<hash>

    Backtrace

    ⠇ mirrord cli starting
      ✓ ready to launch process
        ✓ layer extracted
        ✓ agent pod created
        ✓ pod is ready
    No version is set for command npm
    Consider adding one of the following versions in your config file at /home/jim/Sites/ww-guest-site/.tool-versions```
    

    Relevant Logs

    No response

    Your operating system and version

    Linux kernel 6.0.9

    Local process

    npm run dev (which runs astro dev)

    Local process version

    node v18.8.0

    Additional Info

    No response

    bug 
    opened by nobleach 22
  • dotnet e2e

    dotnet e2e

    Summary

    Extend e2e coverage to include net6.0 runtime and Kestrel web server.

    Coverage

    I've been running the sanity tests against these environments

    • [X] macos arm64 (local)

    Tasks

    • [X] Make tests
    • [X] Get Feedback on work
    • [X] Update change log after feedback and code updates
    • [ ] Update CI to run tests (In progress)

    Criticism welcome 😄

    opened by IsaacCloos 19
  • "unexpected response - expected env vars response None"

    Bug Description

    I tried to use a binary executable file for testing.

    And the pod crashed:

    mirrord exec --target pod/busybox-58d584f97b-pbtv8 -- ./main
    ✓ layer initialized
    ✓ agent running
      ✓ agent pod created
      ✓ pod is ready
    unexpected response - expected env vars response None
    Terminated
    

    Steps to Reproduce

    1. Deploy a busybox image;
    2. Use mirrord mirrord exec --target pod/busybox-58d584f97b-pbtv8 -- ./main;

    Backtrace

    No response

    Relevant Logs

    No response

    Your operating system and version

    Centos 7.9

    Local process

    None

    Local process version

    No response

    Additional Info

    No response

    bug user 
    opened by JasonkayZK 18
  • Go programs cannot access environment variables

    Go programs cannot access environment variables

    Bug Description

    Go binaries cannot access environment variables.

    Steps to Reproduce

    // main.go
    package main
    
    import (
    	"fmt"
    	"os"
    )
    
    func main() {
    	fmt.Println(os.Environ())
    }
    
    go build main.go
    
    mirrord exec \
            --pod-namespace some-namespace \
            --pod-name some-pod \
            --override-env-vars-include "*" \
            ./main
    

    Compare with

    mirrord exec \
            --pod-namespace some-namespace \
            --pod-name some-pod \
            --override-env-vars-include "*" \
            env
    

    Backtrace

    No response

    Relevant Logs

    No response

    Your operating system and version

    macOS 12.5.1 Monterey

    Local process

    main: Mach-O 64-bit executable x86_64 go version go1.19 darwin/amd64

    Local process version

    No response

    Additional Info

    No response

    bug 
    opened by alexg-axis 18
  • exec panic auth error aws

    exec panic auth error aws

    Bug Description

    Running mirrord exec with kubeconfig set to execute aws command to get token, fails with panic.

    Steps to Reproduce

    1. Create EKS cluster
    2. Run aws eks update-kubeconfig --name test-cluster --alias test-cluster
    3. Run mirrord exec ...

    Backtrace

    thread '<unnamed>' panicked at 'failed to create agent in k8s: mirrord-layer: Kube failed with error `auth error: auth exec command '"aws" "--region" "us-east-1" "eks" "get-token" "--cluster-name" "development-cluster"' failed with status signal: 6 (SIGABRT) (core dumped): Output { status: ExitStatus(unix_wait_status(134)), stdout: "", stderr: "thread '<unnamed>' panicked at 'failed to create agent in k8s: mirrord-layer: Kube failed with error `auth error: auth exec command '\"aws\" \"--region\" \"us-east-1\" \"eks\" \"get-token\" \"--cluster-name\" \"development-cluster\"' failed with status signal: 6 (SIGABRT) (core dumped): Output { status: ExitStatus(unix_wait_status(134)), stdout: \"\", stderr: \"thread '<unnamed>' panicked at 'failed to create agent in k8s: mirrord-layer: Kube failed with error `auth error: auth exec command '\\\"aws\\\" \\\"--region\\\" \\\"us-east-1\\\" \\\"eks\\\" \\\"get-token\\\" \\\"--cluster-name\\\" \\\"development-cluster\\\"' failed with status signal: 11 (SIGSEGV) (core dumped): Output { status: ExitStatus(unix_wait_status(139)), stdout: \\\"\\\", stderr: \\\"\\\\r\\\\nmalloc: unknown:0: assertion botched\\\\r\\\\nmalloc: block on free list clobbered\\\\nAborting...\\\" }`!', mirrord-layer/src/connection.rs:92:18\\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\\nfatal runtime error: failed to initiate panic, error 5\\n\" }`!', mirrord-layer/src/connection.rs:92:18\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\nfatal runtime error: failed to initiate panic, error 5\n" }`!', mirrord-layer/src/connection.rs:92:18
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    fatal runtime error: failed to initiate panic, error 5
    

    Relevant Logs

    No response

    Your operating system and version

    Manjaro Linux

    Local process

    Bourne-Again shell script, ASCII text executable

    Local process version

    No response

    Additional Info

    mirrord 3.0.19-alpha

    bug user 
    opened by mentos1386 15
  • `ERROR: transport error 202: connect failed: Unknown error: 111` when debugging a JVM-app

    `ERROR: transport error 202: connect failed: Unknown error: 111` when debugging a JVM-app

    Bug Description

    I get the following error when I set the MIRRORD_TCP_OUTGOING to true on macOS an and a JVM-based service:

    2022-10-26T18:13:26.498142Z  INFO ThreadId(01) mirrord_layer::go_env: replace -> hooking "runtime.goenvs_unix"
    2022-10-26T18:13:26.688625Z  INFO ThreadId(15) mirrord_layer::socket::hooks: 14
    2022-10-26T18:13:26.718586Z  INFO ThreadId(15) mirrord_layer::error: libc error (doesn't indicate a problem) >> ResponseError(
        RemoteIO(
            RemoteIOError {
                raw_os_error: Some(
                    111,
                ),
                kind: ConnectionRefused,
            },
        ),
    )
    ERROR: transport error 202: connect failed: Unknown error: 111
    ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
    JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [./src/jdk.jdwp.agent/share/native/libjdwp/debugInit.c:735]
    
    Process finished with exit code 2
    

    Here are my env vars which I'm using:

    DYLD_INSERT_LIBRARIES=/Users/jamowei/Library/Application Support/JetBrains/IntelliJIdea2022.2/plugins/mirrord/libmirrord_layer.dylib
    LD_PRELOAD=/Users/jamowei/Library/Application Support/JetBrains/IntelliJIdea2022.2/plugins/mirrord/libmirrord_layer.so
    MIRRORD_AGENT_RUST_LOG=DEBUG
    RUST_LOG=DEBUG
    MIRRORD_ACCEPT_INVALID_CERTIFICATES=true
    MIRRORD_EPHEMERAL_CONTAINER=false
    MIRRORD_SKIP_PROCESSES=
    MIRRORD_OVERRIDE_ENV_VARS_INCLUDE=*
    MIRRORD_IMPERSONATED_TARGET=pod/my-service-xxx
    MIRRORD_TARGET_NAMESPACE=mynamespace
    MIRRORD_FILE_OPS=false
    MIRRORD_AGENT_TCP_STEAL_TRAFFIC=false
    MIRRORD_REMOTE_DNS=true
    MIRRORD_TCP_OUTGOING=true
    MIRRORD_UDP_OUTGOING=false
    

    When I set MIRRORD_TCP_OUTGOING to false mirroring works as expected.

    Steps to Reproduce

    1. set MIRRORD_TCP_OUTGOINGto true
    2. start mirrord exec with the JVM-based server
    3. get the error message

    Backtrace

    No response

    Relevant Logs

    2022-10-26T18:22:08.185829Z TRACE ThreadId(11) tungstenite::protocol: Frames still in queue: 0    
    2022-10-26T18:22:08.185827Z TRACE ThreadId(02) handle_daemon_message: mirrord_layer: enter daemon_message=TcpOutgoing(Connect(Err(RemoteIO(RemoteIOError { raw_os_error: Some(111), kind: ConnectionRefused }))))
    2022-10-26T18:22:08.185831Z TRACE ThreadId(11) tokio_tungstenite::compat: /Users/runner/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-tungstenite-0.17.2/src/compat.rs:149 Read.read    
    2022-10-26T18:22:08.185834Z TRACE ThreadId(11) tokio_tungstenite::compat: /Users/runner/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-tungstenite-0.17.2/src/compat.rs:126 AllowStd.with_context    
    2022-10-26T18:22:08.185836Z TRACE ThreadId(11) tokio_tungstenite::compat: /Users/runner/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-tungstenite-0.17.2/src/compat.rs:152 Read.with_context read -> poll_read    
    2022-10-26T18:22:08.185839Z TRACE ThreadId(11) tokio_tungstenite::compat: WouldBlock    
    2022-10-26T18:22:08.185842Z TRACE ThreadId(02) handle_daemon_message:handle_daemon_message: mirrord_layer::outgoing::tcp: enter daemon_message=TcpOutgoing(Connect(Err(RemoteIO(RemoteIOError { raw_os_error: Some(111), kind: ConnectionRefused })))) response=Connect(Err(RemoteIO(RemoteIOError { raw_os_error: Some(111), kind: ConnectionRefused })))
    2022-10-26T18:22:08.185850Z TRACE ThreadId(02) handle_daemon_message:handle_daemon_message: mirrord_layer::outgoing::tcp: Connect -> connect Err(
        RemoteIO(
            RemoteIOError {
                raw_os_error: Some(
                    111,
                ),
                kind: ConnectionRefused,
            },
        ),
    ) daemon_message=TcpOutgoing(Connect(Err(RemoteIO(RemoteIOError { raw_os_error: Some(111), kind: ConnectionRefused })))) response=Connect(Err(RemoteIO(RemoteIOError { raw_os_error: Some(111), kind: ConnectionRefused })))
    2022-10-26T18:22:08.185866Z TRACE ThreadId(02) handle_daemon_message:handle_daemon_message: mirrord_layer::outgoing::tcp: exit daemon_message=TcpOutgoing(Connect(Err(RemoteIO(RemoteIOError { raw_os_error: Some(111), kind: ConnectionRefused })))) response=Connect(Err(RemoteIO(RemoteIOError { raw_os_error: Some(111), kind: ConnectionRefused })))
    2022-10-26T18:22:08.185871Z TRACE ThreadId(02) handle_daemon_message: mirrord_layer: exit daemon_message=TcpOutgoing(Connect(Err(RemoteIO(RemoteIOError { raw_os_error: Some(111), kind: ConnectionRefused }))))
    2022-10-26T18:22:08.185876Z TRACE ThreadId(02) actix_codec::framed: attempting to decode a frame    
    2022-10-26T18:22:08.185906Z TRACE ThreadId(15) connect: mirrord_layer::socket::ops: exit sockfd=14 raw_address=0x70000bc22590 address_length=16
    2022-10-26T18:22:08.185912Z  INFO ThreadId(15) mirrord_layer::error: libc error (doesn't indicate a problem) >> ResponseError(
        RemoteIO(
            RemoteIOError {
                raw_os_error: Some(
                    111,
                ),
                kind: ConnectionRefused,
            },
        ),
    )
    ERROR: transport error 202: connect failed: Unknown error: 111
    ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
    JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [./src/jdk.jdwp.agent/share/native/libjdwp/debugInit.c:735]
    
    Process finished with exit code 2
    

    Your operating system and version

    macOS 12.6

    Local process

    /usr/bin/java: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64 - Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e - Mach-O 64-bit executable arm64e]

    Local process version

    openjdk version "11.0.15" 2022-04-19 LTS OpenJDK Runtime Environment Zulu11.56+19-CA (build 11.0.15+10-LTS) OpenJDK 64-Bit Server VM Zulu11.56+19-CA (build 11.0.15+10-LTS, mixed mode)

    Additional Info

    No response

    bug 
    opened by jamowei 14
  • [Merged by Bors] - Some Improvements to intelliJ extension

    [Merged by Bors] - Some Improvements to intelliJ extension

    • same default options as CLI
    • improved UI layouts
    • fixed not reappearing window after pressing cancel-button
    • separate tcp and udp outgoing option
    • allow only single selection for namespaces and pods
    • refactor UI-creating code to a more Kotlin functional style
    opened by jamowei 12
  • [Merged by Bors] - Override environment variables from the config

    [Merged by Bors] - Override environment variables from the config

    This PR allows overriding environment variables inside config files.

    [feature.env.override]
    FOO = "bar"
    

    The above is equivalent to setting FOO manually before running mirrord and then specifying --exclude "FOO". The pain points of this approach become apparent when there are many environment variables and one has to keep something like a .env file in sync with the excludes passed to mirrord.

    opened by tamasfe 11
  • JetBrain's Plugin does not work on Pycharm

    JetBrain's Plugin does not work on Pycharm

    Bug Description

    Downloaded the plugin via the marketplace. When I try to debug a python script via the IDE's debugger (the mirrord button was already pressed), the procces starts but after couple of seconds I get an error.

    Steps to Reproduce

    1. Hit the mirrord plugin button
    2. Hit the debug button of Pycahrm
    3. Wait for the debug session to start

    Backtrace

    No response

    Relevant Logs

    No response

    Your operating system and version

    Darwin roberts-MacBook-Pro.local 22.1.0 Darwin Kernel Version 22.1.0: Sun Oct 9 20:14:54 PDT 2022; root:xnu-8792.41.9~2/RELEASE_X86_64 x86_64

    Local process

    hitting the run / debug button in the ide

    Local process version

    No response

    Additional Info

    No response

    bug user 
    opened by ni-todo-spot 10
  • SIP binaries support on macOS

    SIP binaries support on macOS

    Currently we don't load into sip protected binaries on macOS. We have a way to fix it, need to implement. If you face a use case where mirrord failed to load on macOS, please upvote/comment on this ticket with details so we can prioritize it accordingly.

    opened by aviramha 10
  • Mounted filesystem/configmap/secret not working

    Mounted filesystem/configmap/secret not working

    Bug Description

    Hi, I have golang application running in k8s cluster and it mounted volumes from secrets and configmap, but when I run the application, it fails because it cannot find the path to the directory.

    Steps to Reproduce

    1. Have running application on k8s with mounted volumes from configmap and secrets.
      containers:
       volumeMounts:
         - name: token
           mountPath: /etc/github
           readOnly: true
         - name: config
           mountPath: /etc/config
           readOnly: true
      volumes:
        - name: token
          secret:
            secretName: token
        - name: config
          configMap:
            name: config
      
    2. Run mirrord exec ./main --target pod/<pod-name>

    Backtrace

    No response

    Relevant Logs

    No response

    Your operating system and version

    Linux Ubuntu 18.04.6 LTS

    Local process

    ./main: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=94de9fb4751f32af5cc6a567323cdf5c32b32478, with debug_info, not stripped

    Local process version

    No response

    Additional Info

    No response

    bug 
    opened by niconatalie 9
  • Only show the outdated version messages on JetBrains IDEs if the new version is already available in the marketplace.

    Only show the outdated version messages on JetBrains IDEs if the new version is already available in the marketplace.

    Whenever a new version of mirrord is available, the user is currently presented with a suggestion to update it: image

    But if the new version is not available on the JetBrains marketplace yet, when clicking update, the user would be presented with the plugin's page where there would be no update button if the current version is the latest available one. image

    It would be a better experience for the message only to be.shown if the new version is already available for JetBrains IDEs.

    enhancement ux intellij-extension 
    opened by t4lz 0
  • Select kubecontext / google cloud project

    Select kubecontext / google cloud project

    I have the same namespace in multiple projects, mirrord only lets me see the namespace, so I have no idea what project I am picking from. Would be great to at least see the context, but optimally also change it directly in the UI.

    enhancement 
    opened by Chr1stian 1
  • TCP Steal/mirror doesn't work with shared sockets

    TCP Steal/mirror doesn't work with shared sockets

    Bug Description

    When a parent process binds a socket, then children sockets listen/accept on that socket mirrord doesn't intercept those calls because the fd isn't managed (doesn't exist in our fork). Using this issue to document use cases where this happens for now:

    • uvicorn when using --reload flag.

    Steps to Reproduce

    from fastapi import FastAPI
    import sys
    app = FastAPI()
    
    
    @app.get("/")
    async def root():
        print("cake")
        return {"message": "Hello World"}
    
    
    @app.get("/hello/{name}")
    async def say_hello(name: str):
        print("pake")
        return {"message": f"Hello {name}"}
    
    

    run with mirrord exec --target pod/pod uvicorn -- --reload --port 80 main:app

    Backtrace

    No response

    Relevant Logs

    No response

    Your operating system and version

    macOS

    Local process

    python

    Local process version

    No response

    Additional Info

    No response

    bug 
    opened by aviramha 2
  • Cannot run mirrord in vscode debug mode with custom launch script

    Cannot run mirrord in vscode debug mode with custom launch script

    Bug Description

    I created the simple setup to reproduce it in this repository https://github.com/niconatalie/mirrord-golang-vscode

    It looks like the process isn't wrap with mirrord layer, the agent will start and stop after few second and the process will "just" run normally

    Steps to Reproduce

    Follow instruction on https://github.com/niconatalie/mirrord-golang-vscode

    Backtrace

    No response

    Relevant Logs

    No response

    Your operating system and version

    Ubuntu 18.04.6 LTS

    Local process

    ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, with debug_info, not stripped

    Local process version

    3.14.1

    Additional Info

    No response

    bug 
    opened by niconatalie 2
  • Support `go run` as an exec target

    Support `go run` as an exec target

    Hi guys,

    First of all, your software is awesome! Currently I'm building my executable in advance and pass it to the mirrord exec command. It would really make my life easier if I could run mirrord exec go run ./cmd/main.go ... instead.

    enhancement 
    opened by gshaibi 2
Releases(3.16.1)
Owner
MetalBear
MetalBear
Jonathan Parker 6 Nov 23, 2022
An example web extension, using MockRTC to intercept & debug your own WebRTC traffic

MockRTC WebExtension Example Part of HTTP Toolkit: powerful tools for building, testing & debugging HTTP(S), WebRTC, and more This is an example web e

HTTP Toolkit 3 Oct 14, 2022
Real-time traffic data of Wiener Linien monitors.

WienerTime wiener-time.vercel.app Real-time traffic data of Wiener Linien monitors. Features Built with the t3-stack, this web app shows real-time tra

Jan Müller 6 Nov 11, 2022
This Lens Protocol module allows you to create a Transparent Promotion system in which the post creator can add a reward for who (ex: influencers) mirror it.

promote-module (in progress) This Lens Protocol module allows you to create a Transparent Promotion system in which the post creator can add a reward

Alessandro Manfredi 9 Oct 2, 2022
This blog is still under development! I present a project scope for science articles, it can now be used in production! But there are some details that need to be put up front.

Science-Blog ?? Attention! This blog is still under development! I present a project scope for science articles, it can now be used in production! But

Raissadev 2 Sep 19, 2022
A CLI tool to make Taobao's npm mirror sync your package immediately.

npm-mirror-sync A CLI tool to make Taobao's npm mirror sync your package immediately. 让淘宝的 NPM 镜像立即收录你的包的新版本。 背景 相信国内小伙伴都在用淘宝的 NPM 镜像(npmmirror.com)作为

CSS魔法 10 Jun 9, 2022
official github mirror of gg-struggle

gg-struggle tl;dr gg-struggle is a program that reduces loading times by caching the Guilty Gear server responses, reducing slowdowns caused by latenc

cybermelon 28 Mar 12, 2022
MagicMirror² is an open source modular smart mirror platform

MagicMirror² is an open source modular smart mirror platform. With a growing list of installable modules, the MagicMirror² allows you to convert your hallway or bathroom mirror into your personal assistant.

Michael Teeuw 17.3k Dec 29, 2022
Awesome mirror.xyz.

优质 Mirror 信息源列表 目录 Mirror 信息源列表 什么是 Mirror 如何提交 为什么要收集这张列表 Mirror 信息源列表 列表上的信息源订阅数不多,暂时取消展示 RSS 订阅数。 简介 订阅链接 标签 Shawn https://submirror.xyz/dao4ever.e

Robin Wen 28 Nov 7, 2022
Mirror from https://github.com/BochilGaming/games-wabot/tree/multi-device

Games-Wabot Join Group Diskusi NO BOT Deploy to Heroku Heroku Buildpack BuildPack LINK FFMPEG here IMAGEMAGICK here FOR TERMUX USER Type mentioned bel

null 48 Dec 20, 2022
A high-speed download mirror list of common software for Chinese users.

cdMir mir.ug0.ltd 介绍 这是一个软件镜像站,旨在通过搜集或搭建镜像的方式,为处于中国大陆的用户提供高速下载服务。 如果您需要软件并未被 cdMir 收录,请联系我们(包括但不限于 发布Issues、社交媒体联系、邮箱联系),我们会考虑并添加。 如果您认为我们值得支持,请 star

Had 14 Dec 29, 2022
Follow along with blog posts, code samples, and practical exercises to learn how to build serverless applications from your local Integrated development environment (IDE).

Getting started with serverless This getting started series is written by the serverless developer advocate team @AWSCloud. It has been designed for d

AWS Samples 55 Dec 28, 2022
✨ A tool for versioning, securing and easily sharing environment variables

ev a tool for versioning, securing and easily sharing environment variables initializing • commands • using in your project Features ⏱ Version control

henrycunh 62 Dec 14, 2022
Cloudy is a set of constructs for the AWS Cloud Development Kit that aim to improve the DX by providing a faster and type-safe code environment.

cloudy-ts These packages aren't yet published on npm. This is still highly experimental. Need to figure out a few things before releasing the first ve

Cristian Pallarés 5 Nov 3, 2022
A Zotero add-on that scans your Markdown reading notes, tags the associated Zotero items, and lets you open notes for the Zotero items in Obsidian.

Zotero Obsidian Citations Adds colored tags to Zotero items that have associated Markdown notes stored in an external folder. Open an associated Markd

Dae 210 Jan 4, 2023
A type speed checking website which lets you check your typing speed and shows the real-tme leaderboards with mongodb as DB and express as backend

This is a Next.js project bootstrapped with create-next-app. Getting Started First, run the development server: npm run dev # or yarn dev Open http://

Sreehari jayaraj 8 Mar 27, 2022
ClickCat is a firendly user interface that lets you search,explore and visualize your ClickHouse Data.

ClickCat is a firendly user interface that lets you search,explore and visualize your ClickHouse Data. We provides the following features,you can acce

海博科技 34 Dec 13, 2022
Codism is a Codepen inspired coding playgound that lets you add and modify HTML, CSS and JavaScript

Codism Codism is a Codepen inspired coding playgound that lets you add and modify HTML, CSS and JavaScript to create in order to create cool stuff! Yo

Muhammad Hasnain 5 Nov 24, 2022