Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 33 additions & 30 deletions docs/docs/intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,68 +7,71 @@ title: Introduction

Juno is a Go implementation of a Starknet full-node client created by Nethermind to allow node operators to easily and reliably support the network and advance its decentralisation goals. Juno supports various node setups, from casual to production-grade indexers.

- **Small database footprint**: Committed to keeping the database size as small as possible
- **[Small database](configuring#pruning)**: pruning runs mainnet in roughly a fifth of full-history disk
- **Ultra-fast synchronisation**: Limited only by your hardware and the sequencer.
- **Complete [JSON-RPC spec](https://github.com/starkware-libs/starknet-specs/tree/master) compliance**: Everything Starknet, accessible from a single point.
- **Minimal RPC response latency**: Ensuring your applications run smoothly.
- **Websocket interface**: For seamless real-time updates of the network.
- **[Snapshot sync](snapshots)**: start from a recent block instead of replaying from genesis
- **[Three RPC versions](json-rpc)**: `v0_8`, `v0_9` and `v0_10` served at the same time
- **[WebSocket subscriptions](websocket)**: new blocks and events pushed as they happen
- **[Minimal RPC latency](configuring#vm--compilation)**: tune VM concurrency and cache size for read-heavy nodes
- **[Prometheus metrics](monitoring)**: sync, database and RPC counters on a scrape endpoint

## Getting started

Learn how to configure and manage your Juno node with the following resources:
These pages follow the order you will need them, from sizing a machine to serving your first request.

```mdx-code-block
import GuideCard from '@site/src/components/GuideCard';

<GuideCard
href="hardware-requirements"
title="Hardware Requirements"
description="Size a machine for a validator, a dApp backend, or an RPC provider"
/>

<GuideCard
href="running-juno"
icon="🚀"
title="Running a Juno Node"
description="Learn how to set up and operate your own Juno node"
description="Start a node with Docker, a prebuilt binary, or from source"
/>

<GuideCard
href="configuring"
icon="⚙️"
title="Juno Configuration Options"
description="Explore various configuration options to customise your node"
href="snapshots"
title="Syncing from a Snapshot"
description="Start from a recent block instead of replaying the chain from genesis"
/>

<GuideCard
href="json-rpc"
icon="🌐"
title="Interacting with Juno"
description="Discover how to interact with Juno using the JSON-RPC and WebSocket interfaces"
href="configuring"
title="Configuring Juno"
description="Set options with flags, environment variables, or a YAML file"
/>

<GuideCard
href="snapshots"
icon="📸"
title="Syncing quickly from a Snapshot"
description="Download and use a snapshot to quickly sync your node with the network"
href="json-rpc"
title="Interacting with Juno"
description="Call the node over JSON-RPC and subscribe to updates over WebSocket"
/>
```

## Community and support

Join our community for support, engaging discussions, and updates:
The [FAQ](faq) covers the errors most operators meet first. For anything else:

- [Telegram](https://t.me/+LHRF4H8iQ3c5MDY0): Share ideas and stay informed with fellow Juno users.
- [Discord](https://discord.gg/SZkKcmmChJ): Connect in real-time with the Juno team and community.
- [X (Twitter)](https://x.com/NethermindStark): Follow for the latest news and insights from Nethermind.
- [Telegram](https://t.me/+LHRF4H8iQ3c5MDY0): Ask questions and follow announcements.
- [Discord](https://discord.gg/SZkKcmmChJ): Reach the Juno team and other operators.
- [X (Twitter)](https://x.com/Nethermind): Follow for the latest news and insights from Nethermind.

## Contributions and partnerships

We value community contributions and are eager to support your involvement. Heres how you can contribute:
We value community contributions and are eager to support your involvement. Here's how you can contribute:

- [Run a Juno node](running-juno) to strengthen the Starknet network.
- Give Juno a [star on GitHub](https://github.com/NethermindEth/juno/stargazers).
- Share your thoughts on [X (Twitter)](https://twitter.com/intent/tweet?url=https%3A%2F%2Fgithub.com%2FNethermindEth%2Fjuno&via=nethermindeth&text=Juno%20is%20Awesome%2C%20they%20are%20working%20hard%20to%20bring%20decentralization%20to%20StarkNet&hashtags=StarkNet%2CJuno%2CEthereum).
- [Run a Juno node](running-juno) to strengthen the Starknet network, or [stake and validate](staking-validator).
- Give Juno a [star on GitHub](https://github.com/NethermindEth/juno).
- Share your thoughts on [X (Twitter)](https://twitter.com/intent/tweet?url=https%3A%2F%2Fgithub.com%2FNethermindEth%2Fjuno&via=Nethermind&hashtags=Starknet%2CJuno).
- [Report bugs](https://github.com/NethermindEth/juno/issues/new) or [suggest new features](https://github.com/NethermindEth/juno/issues/new).
- Encourage others to explore and use Juno.

:::tip
If you're ready to make PRs but unsure where to start, join our [Discord](https://discord.gg/TcHbSZ9ATd), and we'll guide you through some beginner-friendly issues.
If you want to contribute but are unsure where to start, ask in [Discord](https://discord.gg/SZkKcmmChJ) and we'll point you at a beginner-friendly issue.
:::

If you're interested in forming a partnership with the Juno team or have any suggestions or special requests, please don't hesitate to contact us via juno@nethermind.io
Whether it's a partnership, an idea, or a question that doesn't fit anywhere above, we'd love to hear from you at [juno@nethermind.io](mailto:juno@nethermind.io).
2 changes: 1 addition & 1 deletion docs/docusaurus.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ const config = {
},
{
label: "X (Twitter)",
href: "https://x.com/NethermindStark", // NethermindStark account.
href: "https://x.com/Nethermind",
},
{
label: "Telegram",
Expand Down
29 changes: 11 additions & 18 deletions docs/src/components/GuideCard/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,17 @@ import Link from "@docusaurus/Link";

import "./styles.css";

const GuideCard = (props) => {
return (
<Link className="guide-card-href" href={props.href}>
<div className="guide-card-container">
{/* Decorative only: the ordinal is generated in CSS and the link
text carries the meaning. Hidden from assistive tech so the
announced experience matches the visual one — font-size:0
alone would leave the emoji in the accessibility tree. */}
<div className="guide-card-icon" aria-hidden="true">
{props.icon}
</div>
<div className="guide-card-detail">
<div className="guide-card-title">{props.title}</div>
<div className="guide-card-description">{props.description}</div>
</div>
const GuideCard = ({ href, title, description }) => (
<Link className="guide-card-href" href={href}>
<div className="guide-card-container">
{/* Ordinal comes from a CSS counter, so it stays right if cards are reordered. */}
<div className="guide-card-ordinal" aria-hidden="true" />
<div className="guide-card-detail">
<div className="guide-card-title">{title}</div>
<div className="guide-card-description">{description}</div>
</div>
</Link>
);
};
</div>
</Link>
);

export default GuideCard;
50 changes: 22 additions & 28 deletions docs/src/components/GuideCard/styles.css
Original file line number Diff line number Diff line change
@@ -1,12 +1,4 @@
/**
* Guide cards, rendered as a numbered index.
*
* The component ships an emoji per card. Decorative emoji are the single
* clearest "generated" tell on a technical page, so they are suppressed here
* and replaced with a monospace ordinal generated by CSS — no markup change,
* and the ordinal carries real information (reading order) rather than
* decoration.
*/
/* Guide cards, rendered as a numbered index rather than an icon grid. */

.guide-card-href,
.guide-card-href:hover {
Expand All @@ -17,38 +9,31 @@
counter-reset: guide;
}

/* Border and chevron sit at rest, because hover does not exist on touch. */
.guide-card-container {
counter-increment: guide;
display: grid;
grid-template-columns: 2.25rem 1fr 1.25rem;
align-items: baseline;
gap: 1.25rem;
padding: 0.85rem 0.75rem 0.85rem 0.5rem;
margin: 0 -0.75rem;
border: none;
padding: 1rem 1.15rem;
margin: 0 0 0.65rem;
border: 1px solid var(--juno-rule);
border-radius: var(--ifm-global-radius);
transition: background-color 120ms linear;
transition: background-color 120ms linear, border-color 120ms linear;
}

.guide-card-container:hover {
background-color: var(--ifm-background-surface-color);
border-color: var(--juno-rule-soft);
box-shadow: none;
border-color: var(--ifm-color-primary);
}

.guide-card-href:focus-visible .guide-card-container {
outline: 1px solid var(--juno-orange);
outline-offset: -1px;
}

/* Emoji out, ordinal in. */
.guide-card-icon {
font-size: 0;
line-height: inherit;
margin: 0;
}

.guide-card-icon::before {
.guide-card-ordinal::before {
content: counter(guide, decimal-leading-zero);
font-family: var(--ifm-font-family-monospace);
font-size: 0.82rem;
Expand All @@ -57,21 +42,21 @@
letter-spacing: 0.02em;
}

.guide-card-container:hover .guide-card-icon::before {
.guide-card-container:hover .guide-card-ordinal::before {
color: var(--ifm-color-primary);
}

.guide-card-detail {
display: block;
min-width: 0;
}

/* Link colour is the only affordance that survives on a touch device. */
.guide-card-title {
font-weight: 600;
font-size: 1rem;
line-height: 1.45;
letter-spacing: -0.005em;
color: var(--juno-ink);
color: var(--ifm-color-primary);
}

.guide-card-description {
Expand All @@ -80,7 +65,7 @@
color: var(--juno-ink-2);
}

/* Directional affordance, revealed on approach rather than always shouting. */
/* Chevron nudges right on hover instead of appearing from nothing. */
.guide-card-container::after {
content: "";
align-self: center;
Expand All @@ -89,7 +74,7 @@
border-top: 1px solid var(--juno-ink-3);
border-right: 1px solid var(--juno-ink-3);
transform: rotate(45deg) translateX(-2px);
opacity: 0;
opacity: 0.55;
transition: opacity 120ms linear, transform 120ms linear;
}

Expand All @@ -99,6 +84,15 @@
border-color: var(--ifm-color-primary);
}

/* The ordinal and gaps eat a third of a small phone, so give the words the room. */
@media (max-width: 480px) {
.guide-card-container {
grid-template-columns: 1.6rem 1fr 0.85rem;
gap: 0.7rem;
padding: 0.85rem 0.9rem;
}
}

@media (prefers-reduced-motion: reduce) {
.guide-card-container,
.guide-card-container::after {
Expand Down
63 changes: 33 additions & 30 deletions docs/versioned_docs/version-0.16.0/intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,68 +7,71 @@ title: Introduction

Juno is a Go implementation of a Starknet full-node client created by Nethermind to allow node operators to easily and reliably support the network and advance its decentralisation goals. Juno supports various node setups, from casual to production-grade indexers.

- **Small database footprint**: Committed to keeping the database size as small as possible
- **[Small database](configuring#pruning)**: pruning runs mainnet in roughly a fifth of full-history disk
- **Ultra-fast synchronisation**: Limited only by your hardware and the sequencer.
- **Complete [JSON-RPC spec](https://github.com/starkware-libs/starknet-specs/tree/master) compliance**: Everything Starknet, accessible from a single point.
- **Minimal RPC response latency**: Ensuring your applications run smoothly.
- **Websocket interface**: For seamless real-time updates of the network.
- **[Snapshot sync](snapshots)**: start from a recent block instead of replaying from genesis
- **[Three RPC versions](json-rpc)**: `v0_8`, `v0_9` and `v0_10` served at the same time
- **[WebSocket subscriptions](websocket)**: new blocks and events pushed as they happen
- **[Minimal RPC latency](configuring#vm--compilation)**: tune VM concurrency and cache size for read-heavy nodes
- **[Prometheus metrics](monitoring)**: sync, database and RPC counters on a scrape endpoint

## Getting started

Learn how to configure and manage your Juno node with the following resources:
These pages follow the order you will need them, from sizing a machine to serving your first request.

```mdx-code-block
import GuideCard from '@site/src/components/GuideCard';

<GuideCard
href="hardware-requirements"
title="Hardware Requirements"
description="Size a machine for a validator, a dApp backend, or an RPC provider"
/>

<GuideCard
href="running-juno"
icon="🚀"
title="Running a Juno Node"
description="Learn how to set up and operate your own Juno node"
description="Start a node with Docker, a prebuilt binary, or from source"
/>

<GuideCard
href="configuring"
icon="⚙️"
title="Juno Configuration Options"
description="Explore various configuration options to customise your node"
href="snapshots"
title="Syncing from a Snapshot"
description="Start from a recent block instead of replaying the chain from genesis"
/>

<GuideCard
href="json-rpc"
icon="🌐"
title="Interacting with Juno"
description="Discover how to interact with Juno using the JSON-RPC and WebSocket interfaces"
href="configuring"
title="Configuring Juno"
description="Set options with flags, environment variables, or a YAML file"
/>

<GuideCard
href="snapshots"
icon="📸"
title="Syncing quickly from a Snapshot"
description="Download and use a snapshot to quickly sync your node with the network"
href="json-rpc"
title="Interacting with Juno"
description="Call the node over JSON-RPC and subscribe to updates over WebSocket"
/>
```

## Community and support

Join our community for support, engaging discussions, and updates:
The [FAQ](faq) covers the errors most operators meet first. For anything else:

- [Telegram](https://t.me/+LHRF4H8iQ3c5MDY0): Share ideas and stay informed with fellow Juno users.
- [Discord](https://discord.gg/SZkKcmmChJ): Connect in real-time with the Juno team and community.
- [X (Twitter)](https://x.com/NethermindStark): Follow for the latest news and insights from Nethermind.
- [Telegram](https://t.me/+LHRF4H8iQ3c5MDY0): Ask questions and follow announcements.
- [Discord](https://discord.gg/SZkKcmmChJ): Reach the Juno team and other operators.
- [X (Twitter)](https://x.com/Nethermind): Follow for the latest news and insights from Nethermind.

## Contributions and partnerships

We value community contributions and are eager to support your involvement. Heres how you can contribute:
We value community contributions and are eager to support your involvement. Here's how you can contribute:

- [Run a Juno node](running-juno) to strengthen the Starknet network.
- Give Juno a [star on GitHub](https://github.com/NethermindEth/juno/stargazers).
- Share your thoughts on [X (Twitter)](https://twitter.com/intent/tweet?url=https%3A%2F%2Fgithub.com%2FNethermindEth%2Fjuno&via=nethermindeth&text=Juno%20is%20Awesome%2C%20they%20are%20working%20hard%20to%20bring%20decentralization%20to%20StarkNet&hashtags=StarkNet%2CJuno%2CEthereum).
- [Run a Juno node](running-juno) to strengthen the Starknet network, or [stake and validate](staking-validator).
- Give Juno a [star on GitHub](https://github.com/NethermindEth/juno).
- Share your thoughts on [X (Twitter)](https://twitter.com/intent/tweet?url=https%3A%2F%2Fgithub.com%2FNethermindEth%2Fjuno&via=Nethermind&hashtags=Starknet%2CJuno).
- [Report bugs](https://github.com/NethermindEth/juno/issues/new) or [suggest new features](https://github.com/NethermindEth/juno/issues/new).
- Encourage others to explore and use Juno.

:::tip
If you're ready to make PRs but unsure where to start, join our [Discord](https://discord.gg/TcHbSZ9ATd), and we'll guide you through some beginner-friendly issues.
If you want to contribute but are unsure where to start, ask in [Discord](https://discord.gg/SZkKcmmChJ) and we'll point you at a beginner-friendly issue.
:::

If you're interested in forming a partnership with the Juno team or have any suggestions or special requests, please don't hesitate to contact us via juno@nethermind.io
Whether it's a partnership, an idea, or a question that doesn't fit anywhere above, we'd love to hear from you at [juno@nethermind.io](mailto:juno@nethermind.io).
Loading