

VIK Solenoid
BoardStudio is an offline-capable keyboard design workbench built with Dioxus and Rust. It combines layouts, PCB preparation, keymaps, keycaps, mechanical assemblies and portable exports.
- Size
- 25 × 25 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 13
- Nets
- 14
- Pads
- 34
- Tracks, vias
- 50, 6
- Routed
- Yes
- KiCad
- KiCad 8.0 (file 20240108)
- Created
- 20 Sep 2026
- Updated
- 1 Nov 2026
Overview
VIK Solenoid is an open-source printed circuit board by runinit, from the runinit/boardstudio repository on GitHub. It is a 2-layer board of 25 × 25 mm with 13 parts on 14 nets, routed with 50 tracks and 6 vias.
It is built around the TIP120. Its parts include 3 connectors, 1 resistor, 1 diode and 1 transistor.
Main components
1README
README.mdBoardStudio
BoardStudio is an offline-capable keyboard design workbench built with Dioxus and Rust. It combines layouts, PCB preparation, keymaps, keycaps, mechanical assemblies and portable exports. KiCad and CAD tools handle downstream routing and fabrication.
Development
Install the Rust version in rust-toolchain.toml, wasm-pack 0.15.0, Dioxus CLI
0.7.10 and Python 3.11+. No Node, npm or pnpm is needed. KiCad CLI 10 is required for PCB integration checks. Browser tests require
Chrome/Chromium and its compatible ChromeDriver.
python3 scripts/dev-web.pyThe development server runs at http://127.0.0.1:8080/. It builds missing runtime
providers on the first run, then Dioxus watches page edits in the working tree.
Edits that only change rsx! markup are hot-reloaded without recompiling; other Rust
edits rebuild the page. The page builds with the wasm-dev profile in Cargo.toml,
which keeps line tables only; set debug = true there to inspect variables in the
browser debugger, at roughly twice the rebuild time.
Commits, agent registration and migration records are not required.
After changing a worker, bundled example or CAD provider, run
python3 scripts/build-web.py --providers-only to regenerate those assets before testing the page.
Build and preview
python3 scripts/build-web.py
python3 scripts/serve-web.py web/target/site 4173The build creates web/target/site/site-subpath/boardstudio, the /boardstudio/ route
GitHub Pages publishes. Add --routes subpath,root to also package the root route in
web/target/site/site-root. Preview serves the built routes at http://127.0.0.1:4173/
(redirecting / to /boardstudio/ when only the subpath was built) with the isolation
headers required by browser workers. Production build and preview are separate
from the watched development loop. Development uses an online server; use the
production preview to test offline behavior.
The normal Dioxus service worker supports offline use and application updates.
React, its deployment handoff and rollback tooling are retired. Version 1 projects migrate to document format version 2 when loaded; current
projects save locally and round-trip through .boardstudio exports. Existing user files are never erased by
build or cleanup commands.
Checks
python3 scripts/check.pyThis runs documentation link checks, build and content tool tests, rustfmt and Clippy, native
Rust and provider tests, WASM page compilation, release packaging, native/WASM
boundary checks and mounted headless browser tests. Name steps (python3 scripts/check.py --list) to run
only the affected checks during development. The browser runner checks
that every listed test actually executes, grouped into broad batches to avoid repeated
WASM/browser startup costs. Each presentation crate under web/crates/ runs its own browser
tests (wasm-pack test --headless --chrome web/crates/<crate> --lib); the Case workspace,
panel and setup guide tests run separately because their mounted fixtures need an isolated
DOM. Each batch has a bounded two-minute timeout, overridable with
WASM_BINDGEN_TEST_TIMEOUT. A native test run alone does not compile
WASM-only presentation code. Browser setup installs the locked wasm-bindgen runner
before executing tests.
Source layout
| Directory | Purpose |
|---|---|
web/ | Dioxus UI, browser host, workers and offline behavior |
application/ | Accepted state, interactions and scoped operations |
core/ | Document engine, geometry, artifacts and archives |
renderer/, cad/ | Rendering and CAD providers |
contracts/ | Shared Rust boundary types |
footprints/ | Built-in Rust footprint generators, normalization and model references |
ergogen/library/ | Vendored models, source manifests and attribution |
catalogue/, content/ | Components, models, licences and bundled examples |
core/examples/demo_projects/, content/layouts/ | Native bundled-project recipes and measured source layouts |
scripts/ | Build, content preparation and checks |
The Rust crates share one Cargo workspace (root Cargo.toml, Cargo.lock and
target/), so dependencies compile once per profile and target. cad/wasm and
cad/step-oracle stay outside it because they build against the pinned WASI and
native OCCT toolchains.
The repository has no TypeScript or Node dependency; Python scripts handle build, content preparation and checks. Footprint generation runs in Rust inside Core and the page. User-supplied JavaScript generators are not executed. Bundled model export includes used assets; missing or unsupported model paths fail explicitly.
See architecture, domain vocabulary,
component onboarding and
deferred issues. Migration history is preserved in Git at
323967ff; it imposes no development or acceptance process on this branch.
The documentation index links feature references, investigations,
design decisions and historical research.
Parts
13| Qty | Value | Footprint | References |
|---|---|---|---|
| 2 | , | ||
| 1 | 1N4001 | Diode_SMD:D_SOD-123F | D1 |
| 1 | Conn_01x02_Female | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J1 |
| 1 | Conn_01x03_Pin | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J3 |
| 1 | LOGO | LOGO | G*** |
| 1 | R2.2 | Resistor_SMD:R_1206_3216Metric | R1 |
| 1 | TIP120 | Package_TO_SOT_SMD:TO-252-2 | Q1 |
| 1 | vik-module-connector | vik:vik-module-connector-horizontal | J2 |
The 9 most common of 13 parts.
Questions
How big is the VIK Solenoid PCB?
It measures 25 × 25 mm and has 2 copper layers, 1.6 mm thick.
What parts does the VIK Solenoid use?
13 parts, built around the TIP120. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the VIK Solenoid KiCad files?
From the runinit/boardstudio repository on GitHub, at the commit this page was made from: the board is catalogue/modules/sources/Aleblazer-VIK-Solenoid/ExtraSmallVIK/VIK-Solenoid.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Can I use the VIK Solenoid design in my own project?
Its repository states no licence, so its author keeps all rights: ask runinit before reusing the design.
Similar boards
- 2 layers364.4 × 167.3 mm

- 2 layers148.8 × 132.2 mm

Usbflashprog
robsonsmartins/usbflashprog
A memory device programmer (Flash/EPROM/E2PROM) board and software, connected to PC by USB port.
125 parts36 - 2 layers489.6 × 170.7 mm

Mission control
dcpedit/mission-control
Modern replacement PCB for the IBM Model M 122
286 parts31CC-BY-4.0 - 2 layers168 × 123 mm

V2 - 2
RudgeLab/FluoPi
Code and teaching materials for UC/BackyardBrains raspberry pi "macro" scope.
131 parts26 - 2 layers

Catozap
jones139/catocam
Uses a custom trained YoloV8 model on a Raspberry Pi to Detect Cats in CCTV images and Unleash a Cat Deterrent
3 parts18GPL-3.0 - 2 layers32.5 × 21.2 mm

Taptap
dcpedit/taptap
TapTap is a solenoid breakout board for those who are interested in adding a solenoid to their existing project. All you need are the following components, and an extra data pin on your microcontroller.
9 parts13CC-BY-4.0 - 2 layers323.8 × 169.8 mm

- 2 layers57.1 × 102.9 mm

Synthwave
alexose/synthwave
An open-source experiment in carbon removal based on the electrochemical pH swing of seawater.
70 parts10CERN-OHL-P-2.0