Adds size optimizations to any Perseus app automatically.

Overview

Perseus Size Optimization Plugin

WARNING: Until Perseus #66 is fixed, this plugin can actually increase overall binary size! Once that issue is fixed though, it should have the desired effect.

This is a very simple plugin for Perseus that applies size optimizations automatically, which decrease the size of your final Wasm bundle significantly, meaning faster loads for users because a smaller amount of data needs to be transferred to their browsers. Because Perseus renders a page almost immediately through static generation, and then the Wasm bundle is needed to make that page interactive, applying this plugin will decrease your app's time-to-interactive and its total blocking time (a Lighthouse metric that normal Perseus apps don't do so well in on mobile).

If you're new to Perseus, check it out on it's website and on GitHub! Basically though, it's a really fast and fully-featured web framework for Rust!

Usage

In your src/lib.rs, add the following to the bottom of the define_app! macro:

plugins: Plugins::new().plugin(perseus_size_opt(), SizeOpts::default())

If you have any other plugins defined, add the .plugin() call where appropriate. You'll also need to add the following imports:

use perseus_size_opt::{perseus_size_opt, SizeOpts};

Once that's done, run perseus tinker to apply the optimizations (this needs a separate command because they involve modifying the .perseus/ directory), and then you can work with your app as normal!

If you ever want to uninstall the plugin, just remove the relevant .plugin() call and re-run perseus tinker, and it'll be completely removed.

Optimizations

This plugin currently performs the following optimizations:

  • wee_alloc -- an alternative allocator designed for Wasm that reduces binary size at the expense of slightly slower allocations
  • lto -- reduces binary size when set to true by enabling link-time optimizations
  • opt-level -- optimizes aggressively for binary size when set to z
  • codegen-units -- makes faster and smaller code when set to lower values (but makes compile times slower in release mode)

Note that all optimizations will only apply to release builds. except for the use of wee_alloc, which will also affect development builds.

Options

There are a few defaults available for setting size optimization levels, or you can build your own custom settings easily by constructing SizeOpts manually.

  • ::default() -- enables all optimizations
  • ::default_no_lto() -- enables all optimizations except lto = true, because that can break compilation of execution on some hosting providers, like Netlify.
  • ::only_wee_alloc() -- only uses wee_alloc, applying no other optimizations
  • ::no_wee_alloc() -- applies all optimizations other than wee_alloc

Stability

This plugin is considered quite stable due to how basic its optimizations are (the whole thing is one file), and so its stability is mostly dependent on that of Perseus. If you're happy to use Perseus, you shouldn't need to worry about using this plugin as well (in fact, it's recommended that all Perseus apps use this plugin).

License

See LICENSE.

You might also like...
sblade or switchblade it's a multitool in one capable of doing simple analysis with any type of data, attempting to speed up ethical hacking activities

sblade or switchblade it's a multitool in one capable of doing simple analysis with any type of data, attempting to speed up ethical hacking activities

Rust for the Windows App SDK

Rust for the Windows App SDK The windows-app crate makes the Windows App SDK (formerly known as Project Reunion) available to Rust developers.

The working code for my Safe Pay app - check out my tutorial!

Safe Pay Tutorial This repository contains the source code for my blog post Using PDAs and SPL Token in Anchor. The code contains the following: Solan

Provides a wrapper to deserialize clap app using serde.

clap-serde Provides a wrapper to deserialize clap app using serde. API Reference toml const CLAP_TOML: &'static str = r#" name = "app_clap_serde" vers

Mac App/CLI that automatically adds project logos to your locally cloned GitHub repos
Mac App/CLI that automatically adds project logos to your locally cloned GitHub repos

Download the app Automatically adds project logos to your locally cloned GitHub repos. Youtube Video This repository contains the source code for the

Perseus is a blazingly fast frontend web development framework built in Rust with support for major rendering strategies

Perseus is a blazingly fast frontend web development framework built in Rust with support for major rendering strategies, reactivity without a virtual DOM, and extreme customizability

Unsafe assertions that allow for optimizations in release mode.

assert-unchecked Unsafe assertions that allow for optimizations in release mode. These macros use core::hint::unreachable_unchecked, which make it pos

A library and application for lossless, format-preserving, two-pass optimization and repair of Vorbis data, reducing its size without altering any audio information.
A library and application for lossless, format-preserving, two-pass optimization and repair of Vorbis data, reducing its size without altering any audio information.

OptiVorbis A library and application for lossless, format-preserving, two-pass optimization and repair of Vorbis data, reducing its size without alter

A Rust trait to convert numbers of any type and size to their English representation.

num2english This Rust crate provides the NumberToEnglish trait which can be used to convert any* number to its string representation in English. It us

shavee is a Program to automatically decrypt and mount ZFS datasets using Yubikey HMAC as 2FA or any USB drive with support for PAM to auto mount home directories.

shavee is a simple program to decrypt and mount encrypted ZFS user home directories at login using Yubikey HMAC or a Simple USB drive as 2FA written in rust.

Standard Graphics is a command-line tool for printing 2D graphics from any language to any screen.
Standard Graphics is a command-line tool for printing 2D graphics from any language to any screen.

2D graphics in any programming language with just print statements!

Create a Python project automatically with rust (like create-react-app but for python)

create-python-project Create a Python project automatically with rust (like create-react-app but for python) Installation cargo install create-python-

Turn any web page into a desktop app (but, lightweight 1MB)

Intro Turn any web page into a desktop app (but, lightweight 1MB) The bundle will be less than 2MB Demo: https://i.imgur.com/BLr03oF.mp4 Install carg

ZKP fork for rust-secp256k1, adds wrappers for range proofs, pedersen commitments, etc

rust-secp256k1 rust-secp256k1 is a wrapper around libsecp256k1, a C library by Peter Wuille for producing ECDSA signatures using the SECG curve secp25

Adds back-and-forth jumping between current and previous focused windows to Sway.

sway-focus-back-and-forth Implements back-and-forth movement between the current and the previous focused windows. It also can be seen as a fix to thi

Adds zero-cost stack overflow protection to your embedded programs

flip-link adds zero-cost stack overflow protection to your embedded programs The problem Bare metal Rust programs may not be memory safe in presence o

Adds a uf2 header Microsofts HID Flashing Format (UF2) for copying over to UF2 bootloader mass storage devices

uf2conv Adds a uf2 header Microsofts HID Flashing Format (UF2) for copying over to UF2 bootloader mass storage devices. UF2 is factory programmed exte

Mod for pxtone Collage that adds some shiny features
Mod for pxtone Collage that adds some shiny features

ptcMod Mod for pxtone Collage that adds some shiny features READ THIS FIRST The program is extremely invasive to ptCollage. This project makes extensi

postgres-ical - a PostgreSQL extension that adds features related to parsing RFC-5545 « iCalendar » data from within a PostgreSQL database

postgres-ical - a PostgreSQL extension that adds features related to parsing RFC-5545 « iCalendar » data from within a PostgreSQL database

Comments
  • No optimization effects (pending changes in Perseus)

    No optimization effects (pending changes in Perseus)

    Today, I've noticed this new plugin and also the simple example this repo holds, which I've tried to deploy with the Dockerfile bellow. Notice that there is no wee_alloc or other sort of manual optimization in place.

    Dockerfile

    # get the base image
    FROM rust:1.55-slim AS build
    
    # install build dependencies
    RUN apt update \
      && apt install -y --no-install-recommends lsb-release apt-transport-https \
      build-essential curl
    
    # prepare root project dir
    WORKDIR /app
    
    # download the target for wasm
    RUN rustup target add wasm32-unknown-unknown
    
    # install wasm-pack
    RUN cargo install wasm-pack
    
    # retrieve the src dir
    RUN curl https://codeload.github.com/arctic-hen7/perseus-size-opt/tar.gz/main | tar -xz --strip=2 perseus-size-opt-main/examples/simple
    
    # go to src dir
    WORKDIR /app/simple
    
    # install perseus-cli
    RUN cargo install perseus-cli --version 0.3.0-beta.13
    
    # clean app
    RUN perseus clean
    
    # adjust app config
    RUN sed -i s'/perseus = .*/perseus = "0.3.0-beta.13"/' ./Cargo.toml \
      && sed -i s'/perseus-size-opt = .*/perseus-size-opt = "0.1.0"/' ./Cargo.toml \
      && cat ./Cargo.toml
    
    # modify and prepend lib.rs
    RUN sed -i s'/"Hello World!"/"世界您好 !"/' ./src/lib.rs \
      && cat ./src/lib.rs
    
    # prep app
    RUN perseus prep
    
    # adjust and append perseus config
    RUN sed -i s'/perseus = .*/perseus = "0.3.0-beta.13"/' .perseus/Cargo.toml \
      && cat .perseus/Cargo.toml
    
    # deploy app
    RUN perseus deploy
    
    # prepare deployment image
    FROM bitnami/minideb:buster
    
    WORKDIR /app
    
    COPY --from=build /app/simple/pkg /app/
    
    ENV PERSEUS_STANDALONE=true
    
    ENV HOST=0.0.0.0
    
    CMD ["./server"]
    

    The result is that the plugin isn't doing any optimization at all. Bellow is a picture of a browser with network tab opened.

    plugin-not-optimizing

    As always the Dockerfile above is standalone.

    I can provide more feedback if needed, but right now I think this plugin does not add much value. For the most part I do like the way this plugin is headed, but I'd highly recommend leaving it aside at least for the time being until optimizations for production becomes a necessity to deal with for a broader Perseus userbase.

    The reason for the above statement is that I've noticed optimizations of the bundle.wasm size I've managed to do lately seem to add pretty much questionable value. I've noticed that those optimizations affect not only the client side bundle.wasm size, but also shrink the size of the server binary deployed on the server, which should not be desired. Not sure if the aim of this plugin is to do any different and leave the server side bundle unoptimized.

    opened by phaleth 9
  • Custom `SizeOpts` have no effect

    Custom `SizeOpts` have no effect

    The SizeOpts::default() is always applied, no matter how is the SizeOpts struct provided. This leads to an issue with low memory on a VPS because lto cannot be set to false using this plugin.

    Bellow is a standalone Dockerfile that causes the out of memory problem on a VPS during compilation at the perseus deploy and the log of the last two steps.

    Dockerfile

    # get the base image
    FROM rust:1.55-slim AS build
    
    # install build dependencies
    RUN apt update \
      && apt install -y --no-install-recommends lsb-release apt-transport-https \
      build-essential curl
    
    # prepare root project dir
    WORKDIR /app
    
    # download the target for wasm
    RUN rustup target add wasm32-unknown-unknown
    
    # install wasm-pack
    RUN cargo install wasm-pack
    
    # retrieve the src dir
    RUN curl https://codeload.github.com/arctic-hen7/perseus-size-opt/tar.gz/main | tar -xz --strip=2 perseus-size-opt-main/examples/simple
    
    # go to src dir
    WORKDIR /app/simple
    
    # install perseus-cli
    RUN cargo install perseus-cli --version 0.3.0-beta.13
    
    # clean app
    RUN perseus clean
    
    # adjust app config
    RUN sed -i s'/perseus = .*/perseus = "0.3.0-beta.13"/' ./Cargo.toml \
      && sed -i s'/perseus-size-opt = .*/perseus-size-opt = "0.1.0"/' ./Cargo.toml \
      && cat ./Cargo.toml
    
    # activate plugin(s)
    RUN perseus tinker
    
    # modify lib.rs
    RUN sed -i s'/SizeOpts::default()/SizeOpts { wee_alloc: true, lto: false, opt_level: "s".to_string(), codegen_units: 1, }/' ./src/lib.rs \
      && sed -i s'/"Hello World!"/"世界您好 !"/' ./src/lib.rs \
      && cat ./src/lib.rs
    
    # deploy app
    RUN perseus deploy
    
    # prepare deployment image
    FROM bitnami/minideb:buster
    
    WORKDIR /app
    
    COPY --from=build /app/simple/pkg /app/
    
    ENV PERSEUS_STANDALONE=true
    
    ENV HOST=0.0.0.0
    
    CMD ["./server"]
    

    Docker image build

    ...
    Step 12/19 : RUN sed -i s'/SizeOpts::default()/SizeOpts { wee_alloc: true, lto: false, opt_level: "s".to_string(), codegen_units: 1, }/' ./src/lib.rs   && sed -i s'/"Hello World!"/"世界您好 !"/' ./src/lib.rs   && cat ./src/lib.rs
     ---> Running in bdf281af51eb
    use perseus::{define_app, plugins::Plugins, ErrorPages, Template};
    use perseus_size_opt::{perseus_size_opt, SizeOpts};
    use sycamore::template;
    
    define_app! {
        templates: [
            Template::<G>::new("index").template(|_| {
                template! {
                    p { "世界您好 !" }
                }
            })
        ],
        error_pages: ErrorPages::new(|url, status, err, _| {
            template! {
                p { (format!("An error with HTTP code {} occurred at '{}': '{}'.", status, url, err)) }
            }
        }),
        plugins: Plugins::new().plugin(perseus_size_opt(), SizeOpts { wee_alloc: true, lto: false, opt_level: "s".to_string(), codegen_units: 1, })
    }
    Removing intermediate container bdf281af51eb
     ---> 77c19c9e9eae
    Step 13/19 : RUN perseus deploy
     ---> Running in 0a1d94e4c40f
        Updating crates.io index
        Blocking waiting for file lock on package cache
        Blocking waiting for file lock on package cache
     Downloading crates ...
      Downloaded actix-http v2.2.1
      Downloaded typenum v1.14.0
      Downloaded version_check v0.1.5
      Downloaded wee_alloc v0.4.5
      Downloaded actix-macros v0.1.3
      Downloaded actix-service v1.0.6
      Downloaded actix-utils v2.0.0
      Downloaded enum-as-inner v0.3.3
      Downloaded perseus-actix-web v0.3.0-beta.13
      Downloaded pin-project-lite v0.1.12
      Downloaded tracing-core v0.1.21
      Downloaded bytes v0.5.6
      Downloaded hostname v0.3.1
      Downloaded lru-cache v0.1.2
      Downloaded time v0.2.27
      Downloaded sha-1 v0.9.8
      Downloaded standback v0.2.17
      Downloaded serde_urlencoded v0.7.0
      Downloaded rand_chacha v0.2.2
      Downloaded cpufeatures v0.2.1
      Downloaded resolv-conf v0.7.0
      Downloaded tokio v0.2.25
      Downloaded rustc_version v0.3.3
      Downloaded semver-parser v0.10.2
      Downloaded const_fn v0.4.8
      Downloaded pest v2.1.3
      Downloaded language-tags v0.2.2
      Downloaded ppv-lite86 v0.2.14
      Downloaded cookie v0.14.4
      Downloaded actix-threadpool v0.3.3
      Downloaded digest v0.9.0
      Downloaded pin-project v1.0.8
      Downloaded pin-project v0.4.28
      Downloaded opaque-debug v0.3.0
      Downloaded getrandom v0.1.16
      Downloaded fxhash v0.2.1
      Downloaded copyless v0.1.5
      Downloaded convert_case v0.4.0
      Downloaded actix-codec v0.3.0
      Downloaded threadpool v1.8.1
      Downloaded signal-hook-registry v1.4.0
      Downloaded semver v0.11.0
      Downloaded nom v4.2.3
      Downloaded match_cfg v0.1.0
      Downloaded linked-hash-map v0.5.4
      Downloaded generic-array v0.14.4
      Downloaded actix-tls v2.0.0
      Downloaded block-buffer v0.9.0
      Downloaded base64 v0.13.0
      Downloaded tracing v0.1.29
      Downloaded tokio-util v0.3.1
      Downloaded pin-project-internal v0.4.28
      Downloaded pin-project-internal v1.0.8
      Downloaded mio-uds v0.6.8
      Downloaded memory_units v0.4.0
      Downloaded h2 v0.2.7
      Downloaded derive_more v0.99.16
      Downloaded bytestring v1.0.0
      Downloaded buf-min v0.4.0
      Downloaded brotli2 v0.3.2
      Downloaded awc v2.0.3
      Downloaded actix-web-codegen v0.4.0
      Downloaded actix-router v0.2.7
      Downloaded actix-testing v1.0.1
      Downloaded actix-rt v1.1.1
      Downloaded actix-server v1.0.4
      Downloaded actix-files v0.5.0
      Downloaded actix-connect v2.0.0
      Downloaded v_htmlescape v0.12.0
      Downloaded v_escape_derive v0.8.5
      Downloaded v_escape v0.15.0
      Downloaded brotli-sys v0.3.2
      Downloaded time-macros-impl v0.1.2
      Downloaded ucd-trie v0.1.3
      Downloaded time-macros v0.1.1
      Downloaded socket2 v0.3.19
      Downloaded rand_core v0.5.1
      Downloaded rand v0.7.3
      Downloaded trust-dns-resolver v0.19.7
      Downloaded trust-dns-proto v0.19.7
      Downloaded tracing-futures v0.2.5
      Downloaded actix-web v3.3.2
        Blocking waiting for file lock on package cache
        Blocking waiting for file lock on build directory
       Compiling libc v0.2.105
       Compiling futures-core v0.3.17
       Compiling futures-sink v0.3.17
       Compiling futures-channel v0.3.17
       Compiling bytes v0.5.6
       Compiling pin-project-lite v0.1.12
       Compiling pin-project-internal v0.4.28
       Compiling parking_lot_core v0.8.5
       Compiling scopeguard v1.1.0
       Compiling getrandom v0.1.16
       Compiling convert_case v0.4.0
       Compiling tinyvec_macros v0.1.0
       Compiling percent-encoding v2.1.0
       Compiling matches v0.1.9
       Compiling bitflags v1.3.2
       Compiling typenum v1.14.0
       Compiling copyless v0.1.5
       Compiling ppv-lite86 v0.2.14
       Compiling unicode-bidi v0.3.7
       Compiling unicode-segmentation v1.8.0
       Compiling either v1.6.1
       Compiling cc v1.0.71
       Compiling const_fn v0.4.8
       Compiling match_cfg v0.1.0
       Compiling quick-error v1.2.3
       Compiling version_check v0.1.5
       Compiling linked-hash-map v0.5.4
       Compiling crc32fast v1.2.1
       Compiling httparse v1.5.1
       Compiling encoding_rs v0.8.29
       Compiling adler v1.0.2
       Compiling regex-syntax v0.6.25
       Compiling mime v0.3.16
       Compiling cpufeatures v0.2.1
       Compiling byteorder v1.4.3
       Compiling opaque-debug v0.3.0
       Compiling language-tags v0.2.2
       Compiling base64 v0.13.0
       Compiling v_escape v0.15.0
       Compiling v_htmlescape v0.12.0
       Compiling standback v0.2.17
       Compiling generic-array v0.14.4
       Compiling unicase v2.6.0
       Compiling time v0.2.27
       Compiling cookie v0.14.4
       Compiling instant v0.1.12
       Compiling futures-util v0.3.17
       Compiling miniz_oxide v0.4.4
       Compiling log v0.4.14
       Compiling tracing-core v0.1.21
       Compiling buf-min v0.4.0
       Compiling bytestring v1.0.0
       Compiling lock_api v0.4.5
       Compiling tinyvec v1.5.0
       Compiling form_urlencoded v1.0.1
       Compiling heck v0.3.3
       Compiling nom v4.2.3
       Compiling lru-cache v0.1.2
       Compiling brotli-sys v0.3.2
       Compiling fxhash v0.2.1
       Compiling unicode-normalization v0.1.19
       Compiling aho-corasick v0.7.18
       Compiling tracing v0.1.29
       Compiling iovec v0.1.4
       Compiling net2 v0.2.37
       Compiling signal-hook-registry v1.4.0
       Compiling num_cpus v1.13.0
       Compiling getrandom v0.2.3
       Compiling hostname v0.3.1
       Compiling time v0.1.43
       Compiling socket2 v0.3.19
       Compiling wee_alloc v0.4.5
       Compiling idna v0.2.3
       Compiling mime_guess v2.0.3
       Compiling flate2 v1.0.22
       Compiling regex v1.5.4
       Compiling mio v0.6.23
       Compiling threadpool v1.8.1
       Compiling parking_lot v0.11.2
       Compiling rand_core v0.5.1
       Compiling ahash v0.7.6
       Compiling resolv-conf v0.7.0
       Compiling block-buffer v0.9.0
       Compiling digest v0.9.0
       Compiling url v2.2.2
       Compiling derive_more v0.99.16
       Compiling actix-macros v0.1.3
       Compiling time-macros-impl v0.1.2
       Compiling enum-as-inner v0.3.3
       Compiling pin-project-internal v1.0.8
       Compiling v_escape_derive v0.8.5
       Compiling actix-web-codegen v0.4.0
       Compiling chrono v0.4.19
       Compiling brotli2 v0.3.2
       Compiling mio-uds v0.6.8
       Compiling rand_chacha v0.2.2
       Compiling sha-1 v0.9.8
       Compiling pin-project v0.4.28
       Compiling time-macros v0.1.1
       Compiling actix-threadpool v0.3.3
       Compiling pin-project v1.0.8
       Compiling tokio v0.2.25
       Compiling rand v0.7.3
       Compiling serde_urlencoded v0.7.0
       Compiling actix-router v0.2.7
       Compiling tracing-futures v0.2.5
       Compiling futures-executor v0.3.17
       Compiling actix-service v1.0.6
       Compiling tokio-util v0.3.1
       Compiling actix-rt v1.1.1
       Compiling futures v0.3.17
       Compiling actix-codec v0.3.0
       Compiling h2 v0.2.7
       Compiling trust-dns-proto v0.19.7
       Compiling actix-utils v2.0.0
       Compiling trust-dns-resolver v0.19.7
       Compiling actix-server v1.0.4
       Compiling actix-tls v2.0.0
       Compiling sycamore-reactive v0.6.3
       Compiling actix-connect v2.0.0
       Compiling actix-testing v1.0.1
       Compiling sycamore v0.6.3
       Compiling actix-http v2.2.1
       Compiling sycamore-router v0.6.3
       Compiling awc v2.0.3
       Compiling perseus v0.3.0-beta.13
       Compiling actix-web v3.3.2
       Compiling perseus-size-opt v0.1.0
       Compiling perseus-size-opt-example-simple v0.1.0 (/app/simple)
       Compiling actix-files v0.5.0
       Compiling perseus-engine v0.3.0-beta.13 (/app/simple/.perseus)
       Compiling perseus-actix-web v0.3.0-beta.13
       Compiling perseus-cli-server v0.3.0-beta.13 (/app/simple/.perseus/server)
    error: could not compile `perseus-cli-server`
    
    Caused by:
      process didn't exit successfully: `rustc --crate-name perseus_cli_server --edition=2018 server/src/main.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type bin --emit=dep-info,link -C opt-level=z -C lto -C codegen-units=1 -C metadata=3b9ed88fdcb18d6e -C extra-filename=-3b9ed88fdcb18d6e --out-dir /app/simple/.perseus/target/release/deps -L dependency=/app/simple/.perseus/target/release/deps --extern actix_web=/app/simple/.perseus/target/release/deps/libactix_web-bdacbe803fc51059.rlib --extern futures=/app/simple/.perseus/target/release/deps/libfutures-5cb1929ee8e064fa.rlib --extern perseus=/app/simple/.perseus/target/release/deps/libperseus-e171b542cb7455e1.rlib --extern perseus_actix_web=/app/simple/.perseus/target/release/deps/libperseus_actix_web-832bd4e5c6f9f86a.rlib --extern perseus_engine=/app/simple/.perseus/target/release/deps/libperseus_engine.rlib --extern app=/app/simple/.perseus/target/release/deps/libperseus_size_opt_example_simple-b089b08de55c6498.rlib -L native=/app/simple/.perseus/target/release/build/brotli-sys-ac9a6fa216999f3a/out` (signal: 9, SIGKILL: kill)
    ERROR: Service 'perseus' failed to build : The command '/bin/sh -c perseus deploy' returned a non-zero code: 1
    
    opened by phaleth 5
  • Support for perseus v0.4.0-beta.1 needed in examples/simple

    Support for perseus v0.4.0-beta.1 needed in examples/simple

    Please provide a version of examples/simple that can be compiled on perseus v0.4.x and later.

    Current dependencies on perseus-size-opt v0.1.7 and later cause cargo to pull two versions of certain crates when compiling using the current pre-release beta of perseus when following Docker Deployment instructions.

    Thanks! 😺

    opened by allen-woods 3
Owner
arctic_hen7
I can occasionally convince myself that I know what I'm doing.
arctic_hen7
Rusty Reflective DLL Injection - A small reflective loader in Rust 4KB in size

Reflective Loader in Rust (4KB in size) A small reflective loader PoC in Rust. I remade this from my old project (https://github.com/memN0ps/arsenal-r

null 97 Apr 8, 2023
The most primitive and the fastest implementation of a fixed-size last-in-first-out stack on stack in Rust, for Copy-implementing types

This is the simplest and the fastest (faster than Vec!) implementation of a last-in-first-out stack data structure, on stack, when stack elements are

Yegor Bugayenko 10 Jun 18, 2023
Autorebase automatically rebases all of your feature branches onto master.

Autorebase automatically rebases all of your feature branches onto master. If conflicts are found it will rebase to the last commit that doesn't cause conflicts. By default, branches with an upstream are excluded. You don't need to switch to any branch, the only limitation is that a branch that is checked out and not clean will not be rebased (though I may add that in future).

Tim 66 Nov 26, 2022
Automatically download minecraft server jars in one line

MCDL Automatically download minecraft server jars in one line (or one click) Installation Download (Windows, Linux) Install via cargo: cargo install m

Isaac Hirschfeld 1 Oct 26, 2021
A GitHub Action to automatically build and deploy your mdbook project.

?? deploy-mdbook The deploy-mdbook action allows you to easily build and deploy your mdBook project to GitHub Pages. See action.yml for configuration

null 27 Oct 24, 2022
🛡️ Automatically protect the default branch of new repositories in a GitHub organization

The Branch Autoprotector watches a GitHub organization and automatically protects the default branch in new repositories. This service notifies the creator of the default branch of this automatic branch protection setup by filing an issue in the repository.

Branch Autoprotector 2 Jan 31, 2022
A dynamic output configuration tool that automatically detects and configures connected outputs based on a set of profiles.

shikane A dynamic output configuration tool that automatically detects and configures connected outputs based on a set of profiles. Each profile speci

Hendrik Wolff 15 May 4, 2023
Simple library to host lv2 plugins. Is not meant to support any kind of GUI.

lv2-host-minimal Simple library to host lv2 plugins. Is not meant to support any kind of GUI. Host fx plugins (audio in, audio out) Set parameters Hos

Cody Bloemhard 11 Aug 31, 2022
dm-jitaux is a Rust-based JIT compiler using modified auxtools, dmasm and Inkwell LLVM wrapper for boosting Byond DM performance without any hassle!

dm-jitaux is a Rust-based JIT compiler using modified auxtools, dmasm and Inkwell LLVM wrapper for boosting Byond DM performance without any hassle (such as rewriting/refactroing your DM code).

SS220 20 Dec 13, 2022
Auto launch any application or executable at startup

Auto Launch Auto launch any application or executable at startup. Supports Windows, Mac (via AppleScript or Launch Agent), and Linux. How does it work

GyDi 38 Dec 27, 2022